最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Blueprint實(shí)現(xiàn)路由分組及Flask中session的使用詳解

 更新時(shí)間:2023年11月13日 08:32:55   作者:Hunter  
這篇文章主要為大家介紹了Blueprint實(shí)現(xiàn)路由分組及Flask中session的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

前面我們使用 @app.route() 的方式實(shí)現(xiàn)了一個(gè)簡單的接口,用于訪問系統(tǒng)接口,接下來介紹一下如何使用 Blueprint 來實(shí)現(xiàn)路由的分組以及 Flask 中 session 的使用。

本篇筆記的代碼都已經(jīng)提交到 github 上,可使用下面的操作獲取代碼:

git clone https://github.com/x1204604036/flask_backend.git

1、Blueprint 介紹和使用

Blueprint 的使用主要有兩步,一步是定義,一步是注冊(cè)。

下面我們用一個(gè)實(shí)例來介紹如何使用,比如我們這里使用用戶登錄驗(yàn)證的接口來操作。

我們?cè)?nbsp;app/ 文件夾下創(chuàng)建一個(gè)名為 user 的文件夾,在其下再創(chuàng)建一個(gè)名為 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"}

這里,我們實(shí)例化了 Blueprint,定義一個(gè) bp,然后使用 @bp.route() 的方式定義路由和可以調(diào)用的方法,比如 GET,比如 POST。

在 login() 函數(shù)內(nèi)部可以進(jìn)行我們必要的一些邏輯處理,比如用戶名密碼進(jìn)行驗(yàn)證操作。

然后需要將其在 app/__init__.py 中注冊(cè):

# 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

然后運(yùn)行我們的系統(tǒng):

flask run

然后可以使用 postman 來進(jìn)行 POST 請(qǐng)求測(cè)試。

以上就是 Blueprint 的基本使用方法示例。

2、request 請(qǐng)求數(shù)據(jù)獲取

接下來介紹一下 flask 里 request 請(qǐng)求數(shù)據(jù)的獲取

請(qǐng)求方式獲取

判斷請(qǐng)求類型是什么可以直接使用 request.method,引入方式為:

from flask import request

判斷請(qǐng)求類型:

if request.method == "GET":
    print("GET 請(qǐng)求")
elif request.method == "POST":
    print("POST 請(qǐng)求")

GET 參數(shù)獲取

使用 request.args.get() 的方式可以獲取 GET 請(qǐng)求的參數(shù),比如我們的請(qǐng)求 api 是 /user/login?username=admin&password=123456可以這樣獲取:

if request.method == "GET":
    username = request.args.get("username")
    password = request.args.get("password")

POST 表單數(shù)據(jù)

如果我們是使用 POST 請(qǐng)求的表單數(shù)據(jù)請(qǐng)求的,我們需要使用 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 會(huì)話操作

接下來介紹一下在 Flask 中使用 session 會(huì)話。

這個(gè)邏輯大概有三個(gè)接口,

第一個(gè)接口是登錄接口,根據(jù)傳進(jìn)來的用戶名和密碼進(jìn)行驗(yàn)證登錄操作,并將登錄信息寫入 session

第二個(gè)接口是用戶信息接口,這個(gè)接口需要登錄之后才可訪問,邏輯是在獲取用戶信息之前 session 中是否有登錄信息

第三個(gè)接口是登出接口,也就是注銷接口,刪除 session 中的登錄信息

因?yàn)檫@里還沒有介紹數(shù)據(jù)庫的使用,所以接下來示例的檢驗(yàn)操作都忽略,直接獲取驗(yàn)證結(jié)果。

session 的使用介紹

session 通過下面的方式引入:

from flask import session

進(jìn)行 session 的操作和之前 Django 里對(duì) session 的操作類似,我們可以將 user_id 的信息寫入 session,用戶訪問某些需要登錄之后才允許訪問的接口時(shí),需要先讀取 session 信息

# 將 user_id 寫入 session
session["user_id"] = user_id

session 的清除處理:

session.clear()

下面介紹三個(gè)接口的示例

在使用 session 之前,需要設(shè)置密鑰

我們?cè)?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"]
    # 驗(yàn)證用戶名和密碼
    user_id = 1  # 進(jìn)行用戶名和密碼驗(yàn)證,去數(shù)據(jù)庫查詢獲取 user_id 信息
    if user_id:
        session.clear()
        session["user_id"] = user_id
    else:
        return {"code": -1, "msg": "用戶名或密碼錯(cuò)誤"}
    return {"code": 0, "msg": "success"}

登出接口

@bp.route("/logout", methods=("POST",))
def logout():
    session.clear()
    return {"code": 0, "msg": "logout success"}

下面定義一個(gè)獲取用戶信息的接口,這個(gè)接口需要設(shè)置成的邏輯是需要登錄之后才可以訪問接口,這里我們可以先設(shè)置一個(gè)裝飾器,然后再加到接口邏輯上:

def login_required(func):
    def wrapped(*args, **kwargs):
        if session.get("user_id") is None:
            return {"code": -1, "msg": "請(qǐng)先登錄系統(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}

這個(gè) session 操作相當(dāng)于是直接將用戶信息寫入 cookie,之后我們可以嘗試將其寫入 Redis。

關(guān)于這個(gè)訪問需要登錄的設(shè)置,后續(xù)學(xué)習(xí)了中間件的操作之后,我們可以直接使用中間件的方式來進(jìn)行登錄訪問限制。

以上就是Flask筆記二之blueprint和session介紹的詳細(xì)內(nèi)容,更多關(guān)于Flask筆記blueprint和session介紹的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 用Python和WordCloud繪制詞云的實(shí)現(xiàn)方法(內(nèi)附讓字體清晰的秘笈)

    用Python和WordCloud繪制詞云的實(shí)現(xiàn)方法(內(nèi)附讓字體清晰的秘笈)

    這篇文章主要介紹了用Python和WordCloud繪制詞云的實(shí)現(xiàn)方法(內(nèi)附讓字體清晰的秘笈),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • 詳解Python調(diào)試神器之PySnooper

    詳解Python調(diào)試神器之PySnooper

    在程序開發(fā)過程中,代碼的運(yùn)行往往會(huì)和我們預(yù)期的結(jié)果有所差別。于是,我們需要清楚代碼運(yùn)行過程中到底發(fā)生了什么?代碼哪些模塊運(yùn)行了,哪些模塊沒有運(yùn)行?輸出的局部變量是什么樣的?PySnooper,能夠大大減少調(diào)試過程中的工作量
    2021-11-11
  • python3+opencv生成不規(guī)則黑白mask實(shí)例

    python3+opencv生成不規(guī)則黑白mask實(shí)例

    今天小編就為大家分享一篇python3+opencv生成不規(guī)則黑白mask實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python數(shù)據(jù)分析之缺失值檢測(cè)與處理詳解

    Python數(shù)據(jù)分析之缺失值檢測(cè)與處理詳解

    在實(shí)際的數(shù)據(jù)處理中,缺失值是普遍存在的,如何使用 Python 檢測(cè)和處理缺失值,就是本文要講的主要內(nèi)容。感興趣的同學(xué)可以關(guān)注一下
    2021-12-12
  • 利用Python內(nèi)置庫實(shí)現(xiàn)創(chuàng)建命令行應(yīng)用程序

    利用Python內(nèi)置庫實(shí)現(xiàn)創(chuàng)建命令行應(yīng)用程序

    Python?有一個(gè)叫做argparse的內(nèi)置庫,可以用它來創(chuàng)建一個(gè)命令行界面。本文將詳解如何利用argparse實(shí)現(xiàn)創(chuàng)建一個(gè)命令行應(yīng)用程序,需要的可以參考一下
    2022-06-06
  • Python生成可執(zhí)行文件之PyInstaller庫的使用方式

    Python生成可執(zhí)行文件之PyInstaller庫的使用方式

    PyInstaller是一個(gè)十分有用的第三方庫,通過對(duì)源文件打包,Python程序可以在沒有安裝Python的環(huán)境中運(yùn)行,也可以作為一個(gè)獨(dú)立文件方便傳遞和管理,下面這篇文章主要給大家介紹了關(guān)于Python生成可執(zhí)行文件之PyInstaller庫的使用方式,需要的朋友可以參考下
    2022-04-04
  • Zabbix實(shí)現(xiàn)微信報(bào)警功能

    Zabbix實(shí)現(xiàn)微信報(bào)警功能

    這篇文章主要介紹了Zabbix實(shí)現(xiàn)微信報(bào)警的相關(guān)資料,本文圖文并茂介紹的非常詳細(xì),需要的朋友可以參考下
    2016-10-10
  • 使用Python查詢自己或任意指定的IP地址

    使用Python查詢自己或任意指定的IP地址

    這篇文章主要為大家詳細(xì)介紹了如何使用Python查詢自己或任意指定的IP地址,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-10-10
  • python+tkinter智能實(shí)現(xiàn)票據(jù)生成

    python+tkinter智能實(shí)現(xiàn)票據(jù)生成

    這篇文章主要為大家詳細(xì)介紹了如何結(jié)合python和tkinter智能實(shí)現(xiàn)票據(jù)生成,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-07-07
  • python argparse命令行參數(shù)解析(推薦)

    python argparse命令行參數(shù)解析(推薦)

    Python argparse模塊是解析命令行參數(shù)的首選方法。解析命令行參數(shù)是一個(gè)非常常見的任務(wù),Python腳本根據(jù)傳遞的值來執(zhí)行和操作
    2021-06-06

最新評(píng)論

呈贡县| 黔西县| 黄石市| 郴州市| 安溪县| 广昌县| 吴川市| 南靖县| 乌拉特后旗| 凤庆县| 个旧市| 鹤峰县| 竹溪县| 东丽区| 安龙县| 江山市| 财经| 黄大仙区| 民乐县| 西盟| 集安市| 桃园市| 江陵县| 嘉义县| 广水市| 林西县| 定西市| 济宁市| 镇宁| 兴国县| 娱乐| 应城市| 长子县| 瑞金市| 永昌县| 界首市| 资源县| 和平县| 邢台县| 安福县| 黎川县|