在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工具來進行介面測試。