在Flask中構建API接口的相關概念
在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界面導航


浙公網安備 33010602011771號