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

Table of Contents

 

01上下文

02請求鉤子

04 Flask-script擴展命令行


01上下文

背景:可以直接從request對象獲取參數

Django是通過視圖函數傳入request對象,屬於局部變量:

def index(request):

Flask中request是全局變量,多個線程操作同一資源會有競爭問題。如何區分不同用戶的請求:與其執行的上下文環境有關係,彼此相互隔離

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

請求上下文:用線程編號作爲鍵,再在裏面包含字典數據,使用起來就像線程的局部變量

Session也是請求上下文

應用上下文:current_app

操作全局app對象,其實是當前所在的整個應用

g也是應用上下文,導入g處理請求,臨時存儲對象,每次請求都會重置清空這個變量

如登陸用戶名可通過對象新增屬性進行保存

from flask import g

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

       g.username="zhangsan"

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

@app.route('/login')   

def login():

       g.username="zhangsan"

       say_hello()

       return "login success"

 

def say_hello():

       name=g.username

       return "hello %s" % name

02請求鉤子

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

#每次請求都執行

@app.before_request

def is_login():

    if request.path == "/login":

        return None

 

    if not session.get("user"):

        return redirect("/login")

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

@app.after_request

def foot_log(response):

    if request.path != "/login":

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

    return response

#第一次請求處理前執行

@app.before_first_request

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

@app.teardown_request

def handle_teardown_request(response):

    print(request.path)

    print("handle_teardown_request執行")

    return response

04 Flask-script擴展命令行

pip install Flask-script

from flask_script import Manager

Manager:啓動命令的管理類。創建管理類的對象:

manager=Manager(app)

通過管理對象啓動:

if __name__ == '__main__':

       manager.run()

啓動可選參數有shell、runserver

python flask.py runserver -h 0.0.0.0 -p 8000

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章