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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值