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

猜你喜欢

转载自blog.csdn.net/lagoon_lala/article/details/106883894