Blueprint實現(xiàn)路由分組及Flask中session的使用詳解
正文
前面我們使用 @app.route() 的方式實現(xiàn)了一個簡單的接口,用于訪問系統(tǒng)接口,接下來介紹一下如何使用 Blueprint 來實現(xiàn)路由的分組以及 Flask 中 session 的使用。
本篇筆記的代碼都已經(jīng)提交到 github 上,可使用下面的操作獲取代碼:
git clone https://github.com/x1204604036/flask_backend.git
1、Blueprint 介紹和使用
Blueprint 的使用主要有兩步,一步是定義,一步是注冊。
下面我們用一個實例來介紹如何使用,比如我們這里使用用戶登錄驗證的接口來操作。
我們在 app/ 文件夾下創(chuàng)建一個名為 user 的文件夾,在其下再創(chuàng)建一個名為 bp_user.py 文件,其內(nèi)容如下:
# app/user/bp_user.py
from flask import Blueprint, request
bp = Blueprint("user", __name__, url_prefix="/user")
@bp.route("/login", methods=("POST", "GET"))
def login():
# username = request.form["username"]
# password = request.form["password"]
return {"code": 0, "msg": "success"}這里,我們實例化了 Blueprint,定義一個 bp,然后使用 @bp.route() 的方式定義路由和可以調(diào)用的方法,比如 GET,比如 POST。
在 login() 函數(shù)內(nèi)部可以進行我們必要的一些邏輯處理,比如用戶名密碼進行驗證操作。
然后需要將其在 app/__init__.py 中注冊:
# app/__init__.py
from flask import Flask
def create_app():
app = Flask(__name__)
from .user import bp_user
app.register_blueprint(bp_user.bp)
return app然后運行我們的系統(tǒng):
flask run
然后可以使用 postman 來進行 POST 請求測試。
以上就是 Blueprint 的基本使用方法示例。
2、request 請求數(shù)據(jù)獲取
接下來介紹一下 flask 里 request 請求數(shù)據(jù)的獲取
請求方式獲取
判斷請求類型是什么可以直接使用 request.method,引入方式為:
from flask import request
判斷請求類型:
if request.method == "GET":
print("GET 請求")
elif request.method == "POST":
print("POST 請求")GET 參數(shù)獲取
使用 request.args.get() 的方式可以獲取 GET 請求的參數(shù),比如我們的請求 api 是 /user/login?username=admin&password=123456可以這樣獲?。?/p>
if request.method == "GET":
username = request.args.get("username")
password = request.args.get("password")POST 表單數(shù)據(jù)
如果我們是使用 POST 請求的表單數(shù)據(jù)請求的,我們需要使用 request.form 的方式獲取數(shù)據(jù):
if request.method == "POST":
username = request.form.get("username")
password = request.form.get("password")POST json 數(shù)據(jù)
如果是使用 POST 放到 json 里傳輸?shù)?,可以使?request.get_json() 方法獲取全部數(shù)據(jù):
if request.method == "POST":
request_json = request.get_json()
username = request_json.get("username")
password = request_json.get("password")3、session 會話操作
接下來介紹一下在 Flask 中使用 session 會話。
這個邏輯大概有三個接口,
第一個接口是登錄接口,根據(jù)傳進來的用戶名和密碼進行驗證登錄操作,并將登錄信息寫入 session
第二個接口是用戶信息接口,這個接口需要登錄之后才可訪問,邏輯是在獲取用戶信息之前 session 中是否有登錄信息
第三個接口是登出接口,也就是注銷接口,刪除 session 中的登錄信息
因為這里還沒有介紹數(shù)據(jù)庫的使用,所以接下來示例的檢驗操作都忽略,直接獲取驗證結(jié)果。
session 的使用介紹
session 通過下面的方式引入:
from flask import session
進行 session 的操作和之前 Django 里對 session 的操作類似,我們可以將 user_id 的信息寫入 session,用戶訪問某些需要登錄之后才允許訪問的接口時,需要先讀取 session 信息
# 將 user_id 寫入 session session["user_id"] = user_id
session 的清除處理:
session.clear()
下面介紹三個接口的示例
在使用 session 之前,需要設(shè)置密鑰
我們在 app/__init__.py 中設(shè)置:
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'
secret_key 的值生成方式可以通過下面的操作獲?。?/p>
python3 -c 'import secrets; print(secrets.token_hex())'
登錄接口
@bp.route("/login", methods=("POST",))
def login():
# username = request.form["username"]
# password = request.form["password"]
# 驗證用戶名和密碼
user_id = 1 # 進行用戶名和密碼驗證,去數(shù)據(jù)庫查詢獲取 user_id 信息
if user_id:
session.clear()
session["user_id"] = user_id
else:
return {"code": -1, "msg": "用戶名或密碼錯誤"}
return {"code": 0, "msg": "success"}登出接口
@bp.route("/logout", methods=("POST",))
def logout():
session.clear()
return {"code": 0, "msg": "logout success"}下面定義一個獲取用戶信息的接口,這個接口需要設(shè)置成的邏輯是需要登錄之后才可以訪問接口,這里我們可以先設(shè)置一個裝飾器,然后再加到接口邏輯上:
def login_required(func):
def wrapped(*args, **kwargs):
if session.get("user_id") is None:
return {"code": -1, "msg": "請先登錄系統(tǒng)"}
return func(*args, **kwargs)
return wrapped
@bp.route("/user_info", methods=("POST",))
@login_required
def get_user_info():
user_id = session.get("user_id")
user_info = {"user_id": user_id} # get user info from db
return {"code": 0, "msg": "success", "user_info": user_info}這個 session 操作相當于是直接將用戶信息寫入 cookie,之后我們可以嘗試將其寫入 Redis。
關(guān)于這個訪問需要登錄的設(shè)置,后續(xù)學習了中間件的操作之后,我們可以直接使用中間件的方式來進行登錄訪問限制。
以上就是Flask筆記二之blueprint和session介紹的詳細內(nèi)容,更多關(guān)于Flask筆記blueprint和session介紹的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python學習基礎(chǔ)之循環(huán)import及import過程
python中的import語句是用來導入模塊的,下面這篇文章主要給大家介紹了關(guān)于python學習基礎(chǔ)之循環(huán)import及import過程的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。2018-04-04
python 截取XML中bndbox的坐標中的圖像,另存為jpg的實例
這篇文章主要介紹了python 截取XML中bndbox的坐標中的圖像,另存為jpg的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
使用PySpark實現(xiàn)數(shù)據(jù)清洗與JSON格式轉(zhuǎn)換的實踐詳解
在大數(shù)據(jù)處理中,PySpark?提供了強大的工具來處理海量數(shù)據(jù),特別是在數(shù)據(jù)清洗和轉(zhuǎn)換方面,本文將介紹如何使用?PySpark?進行數(shù)據(jù)清洗,并將數(shù)據(jù)格式轉(zhuǎn)換為?JSON?格式的實踐,感興趣的可以了解下2023-12-12
python字符串和常用數(shù)據(jù)結(jié)構(gòu)知識總結(jié)
在本文中我們系統(tǒng)的給大家整理了關(guān)于python字符串和常用數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識點以及實例代碼,需要的朋友們學習下。2019-05-05
python模塊和包的應(yīng)用BASE_PATH使用解析
這篇文章主要介紹了python模塊和包的應(yīng)用BASE_PATH使用解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12
Python可變參數(shù)會自動填充前面的默認同名參數(shù)實例
今天小編就為大家分享一篇Python可變參數(shù)會自動填充前面的默認同名參數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11

