1-8-flask框架-框架-钩子函数

前言:

还记得对请求的session校验吗?

我们使用了装饰器来做的,这样每一个视图都要加装饰器,

Django里面是使用的中间件来做的, 那么flask可以使用中间件来做吗?

Flask之钩子函数

类似django的中间件,作用就是在进入框架的之后 http方法之前或返回response之前进行一些操作
Flask的钩子函数可在注册时根据注册的app或者蓝图从而确定钩子函数作用的范围(可全局 也可作用某一个蓝图)

常用的钩子函数

@before_first_request

在对应用程序实例的第一个请求之前注册要运行的函数,只会运行一次
格式:

@App.before_app_first_request
def before_app_first_request():
	pass

@before_request

在每个请求之前注册一个要运行的函数,每一次请求都会执行一次

格式:

@App.before_app_request
def before_app_request():
	pass

第一点:不使用自己写装饰器,使用的是app的一个装饰器before_request

第二点,要注意,登陆页面是不需要登陆的,加一个白名单过滤

第三点,return None就是什么都不做,继续往下走

第四点,return 有内容,就是不往下走了,就停在这里了,

第五点,可以是针对整个flask的所有请求,@app.before_request,
也可以针对单个蓝图的请求,@蓝图.before_request
也可以在蓝图中针对整个app的请求,@蓝图.before_app_request

from flask import Flask,request,session,redirect

app = Flask(__name__)
@app.before_request
def process_request(*args, **kwargs):
    if request.path == '/login':
        return None
    user = session.get('user_info')
    if user:
        return None
    return redirect('/login')

@after_request

在每个请求之后注册一个要运行的函数,每次请求完成后都会执行。
需要接受一个Response对象作为参数,并返回一个新的Response对象,或者返回接收的Response对象

@App.after_request
def after_request(response):
	pass
	return response

可以添加多个,但是注意顺序
before,是按照顺序
after,是按照倒序,
和套娃一样,这也是Python装饰器的执行顺序,
请求的处理过程:pre_process -> view -> after_process

@teardown_request

注册在每一个请求的末尾,不管是否有异常,每次请求的最后都会执行。

@context_processor

上下文处理器,返回的字典可以在全部的模板中使用

@template_filter('xxxxxx')

增加模板过滤器,可以在模板中使用该函数,后面的参数是名称,在模板中用到

@errorhandler(400)

发生一些异常时,比如404,500,或者抛出异常(Exception)之类的,就会自动调用该钩子函数
1.发生请求错误时,框架会自动调用相应的钩子函数,并向钩子函数中传入error参数
2.如果钩子函数没有定义error参数,就会报错
3.可以使用abort函数来手动终止请求抛出异常,如果要是发生参数错误,可以abort(404)之类的

这个可以根据状态码来定制,404,500都可以定制,

总结,

最常用的就是before_request,after_request

posted @ 2021-07-28 19:09  技术改变命运Andy  阅读(49)  评论(0编辑  收藏  举报