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")