8

在Flask中构建API接口的相关概念 - 大雄的叮当猫

 1 year ago
source link: https://www.cnblogs.com/engpj/p/17110679.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在Flask中构建API接口的相关概念

重定向行为

以下两个路由的不同之处在于是否使用尾部的斜杠。

第一个路由的URL尾部有一个斜杠,看起来就像一个文件夹,访问一个没有斜杠结尾的URL时,Flask会自动进行重定向,在结尾加上一个斜杠。

第二个路由的URL没有尾部斜杠,因此其行为表现与一个文件类似,如果访问这个URL时添加了尾部斜杠就会得到一个404错误,这样可以保持URL唯一,并帮助搜索引擎避免重复索引同一页面。

@app.route('/home/')
def hello_world():
    return 'Hello World!'
    
@app.route('/home')
def hello_world():
    return 'Hello World!'

redirect

from flask import Flask, redirect

@app.route('/baidu')
def baidu():
    return redirect('https://www.baidu.com')

Flask HTTP方法

1 GET 请求指定的页面信息,并返回实体主体。
2 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
3 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
4 DELETE 请求服务器删除指定的页面。
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return do_the_login()
    else:
        return show_the_login_form()

登录登出案例

# 登录
@app.route("/login", methods=['POST'])
def login():
    """
    username: 123456
    password: 123456
    :return:
    """
    get_data = request.get_json()
    username = get_data.get("username")
    password = get_data.get("password")

    if not all([username, password]):
        return jsonify(msg="参数不完整")

    if username == '123456' and password == '123456':
        # 如果验证通过,保存登录状态在session中
        session['username'] = username
        return jsonify(msg='登录成功')
    else:
        return jsonify(msg='账号或密码错误')

# 检查登录状态
@app.route("/session", methods=["GET"])
def check_session():
    username = session.get("username")
    if username is not None:
        return jsonify(username=username)
    else:
        return jsonify(msg="出错了,没登录")

# 登出
@app.route('/logout', methods=['GET'])
def logout():
    session.clear()
    return jsonify(msg='成功退出登录')

Cookie

要访问cookie,可以使用cookie属性,通过使用响应对象的set_cookie方法来设置cookie。请求对象的cookie属性是一个包含了客户端传输的所有cookie的字典。在Flask中,如果使用session,就不要直接使用cookie,因为session比较安全一些。

Session

session 是基于cookie实现, 保存在服务端的键值对(形式为 {随机字符串:‘xxxxxx’}), 同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的 时候验证。

一、配置SECRET_KEY

因为flask的session是通过加密之后放到了cookie中,所以需要配置“SECRET_KEY”。

新建一个config.py的文件配置secret_key

config.py

SECRET_KEY = 'XXXXXXXXX'

然后在主运行文件里面添加config文件里面的内容。

from flask import Flask,session
import config
app = Flask(__name__)
app.config['SECRET_KEY'] = config.SECRET_KEY  # 写法一
app.secret_key = config.SECRET_KEY  # 写法二

二、操作session

操作session的方法就如同操作字典。

设置session

# 设置session
@app.route('/')
def set():
     session['name'] = 'lili' # 设置“字典”键值对
     return 'success'

读取session

因为session就像字典一样所以,操作它的时候有两种方法:

  • (1)result = session[‘key’] :如果内容不存在,将会报异常。
  • (2)result = session.get(‘key’) :如果内容不存在,将返回None(推荐用法)。
# 读取session
@app.route('/get')
def get():
    session['name']  # 写法一
    session.get('name')  # 写法二
    return 'success'

删除session

# 删除session
@app.route('/delete/')
def delete():
    session.pop('name',None)  # 写法一
    session['name'] = False  # 写法二
    return 'success'

清除session中所有数据

# 清除session中所有数据
@app.route('/clear')
def clear():
    session.clear()
    return 'success'

三、设置session的过期时间

若没有指定session的过期时间,那么默认是浏览器关闭后就自动结束。session.permanent = True语句在flask下则可以将有效期延长至一个月。

 # 设置session
 @app.route('/')
 def set():
     session['name'] = 'lili'
     session.permanent = True # 长期有效,一个月的时间有效
     return 'success'
  • 1.引入包:from datetime import timedelta
  • 2.配置有效期限:app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效
  • 3.设置:session.permanent = True
#encoding: utf-8
from flask import Flask,session
from datetime import timedelta
import os 
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效 

# 设置session
@app.route('/')
def set():
    session['username'] = 'liefyuan'
    session.permanent = True
    return 'success'

Postman

在构建API接口时,可以使用Postman工具来进行接口测试。

Postman界面导航

01.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK