flask常用的几种钩子函数介绍

flask中具有四种钩子被做成了修饰器,我们在后端可以进行调用做相关的操作.使用钩子函数时,我们需要借助flask的全局变量g,g作为中间变量,在钩子函数和视图函数中间传递数据

为什么叫做钩子函数呢,是因为钩子函数可以在正常执行的代码中,插入一段自己想要执行的代码,这种函数就叫做钩子函数(hook)

1.before_first_request,flask项目第一次部署后会执行的钩子函数

@app.before_first_request
def bf_first_request():
    g.string = 'before_first_request'

2.before_request,请求已经达到了flask,但是还没有进入到具体的视图函数之前调用,一般这个就是在视图函数之前,我们可以把一些后面需要用到的数据先处理好,方便视图函数使用

@app.before_request
def bf_request():
    g.string = 'before_request'

3.after_request,注册一个函数,在每次请求之后运行,注册的函数至少需要含有一个参数,这个参数实际上为服务器的响应,且函数中需要返回这个响应参数,

@app.after_request
def af_request(param):
    return param

4.teardown_request,注册一个函数,同样在每次请求之后运行,注册的函数至少需要含有一个参数,不管是否有异常都会执行,而after_request则有异常就不会执行

@app.teardown_request
def td_request(param):
    return param

5.app_context_processor,使用这个钩子函数,必须返回一个字典,这个字典的值在所有模板中都可以使用,如果在很多模板中都要用到的变量,那么就可以使用这个钩子函数来返回,而不用在每个视图函数中使用render_tempplat函数中去写,这样可以让代码更加简洁

@app.app_context.processor
def nav():
    nav = {"1":"新闻","2":"军事","3":"财经","4":"娱乐"}
    return nav

6.errorhandler,发生一些异常的时候,比如404,500错误,如果想自定义处理这些错误,可以使用这个函数,使用这个函数需要注意几点

1)使用这个函数一定要返回状态码

2)在errorhandler装饰的钩子函数中,必须要要写一个参数来接收错误信息,如果没有参数会报错

3)需要使用flask.abort手工抛出响应的错误码

@app.errorhandler(404)
def not_found_page(error):
    return render_template("404.html"),404

或者以下同一将错误视图函数定义到一起,和其他视图函数分开到各自文件中去写,需要通到flask.abort

@app.route("/")
def index():
    abort(404)

@app.errorhandler(404)
def not_found_page(error):
    render_template("404.html")


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/666.html