flask筆記4 上下文與請求鉤子

2021-10-07 09:19:50 字數 1509 閱讀 3392

table of contents

01上下文

02請求鉤子

04 flask-script擴充套件命令列

背景:可以直接從request物件獲取引數

django是通過檢視函式傳入request物件,屬於區域性變數:

def index(request):

flask中request是全域性變數,多個執行緒操作同一資源會有競爭問題。如何區分不同使用者的請求:與其執行的上下文環境有關係,彼此相互隔離

上下文主要有:請求上下文、應用上下文

請求上下文:用執行緒編號作為鍵,再在裡面包含字典資料,使用起來就像執行緒的區域性變數

session也是請求上下文

g也是應用上下文,匯入g處理請求,臨時儲存物件,每次請求都會重置清空這個變數

如登陸使用者名稱可通過物件新增屬性進行儲存

from flask import g

#可替代session["name"]="python"

g.username="zhangsan"

在一次請求之內通過g傳參

def login():

g.username="zhangsan"

say_hello()

return "login success"

def say_hello():

name=g.username

return "hello %s" % name

flask支撐4種請求鉤子hook,通過裝飾器實現:

#每次請求都執行

def is_login():

if request.path == "/login":

return none

if not session.get("user"):

return redirect("/login")

#每次請求處理無異常順利完成後

def foot_log(response):

if request.path != "/login":

print("有客人訪問了",request.path)

return response

#第一次請求處理前執行

#每次請求處後,無論是否異常

def handle_teardown_request(response):

print(request.path)

print("handle_teardown_request執行")

return response

pip install flask-script

from flask_script import manager

manager:啟動命令的管理類。建立管理類的物件:

通過管理物件啟動:

if __name__ == '__main__':

manager.run()

啟動可選引數有shell、runserver

python flask.py runserver -h 0.0.0.0 -p 8000

flask之請求上下文

第一階段 將ctx request,session 放到local物件上 第二階段 檢視函式匯入 request session request.method localproxy物件.method,執行getattr方法,getattr self.get current object name s...

flask請求鉤子 請求上下文

from flask import flask from flask import redirect,url for,abort 在第一次請求之前呼叫,可以在當前的方法中初始化操作 def before first request print before first request 在每一次請求之...

Flask 應用和請求上下文

from flask import request defindex user request.headers.get user agent return you browserid format user 標題flask應用上下文和請求上下文 變數名上下文說明 應用上下文 當前應用的應用例項 g應...