Flask学习笔记(10):钩子函数

常用的钩子函数:
在Flask中钩子函数是使用特定的装饰器装饰的函数。为什么叫做钩子函数呢,是因为钩子函数可以在正常执行的代码中,插入一段自己想要执行的代码。那么这种函数就叫做钩子函数。(hook)
1. before_first_request:Flask项目第一次部署后会执行的钩子函数。
2. before_request:请求已经到达了Flask,但是还没有进入到具体的视图函数之前调用。一般这个就是在视图函数之前,我们可以把一些后面需要用到的数据先处理好,方便视图函数使用。
3. context_processor:使用这个钩子函数,必须返回一个字典。这个字典中的值在所有模版中都可以使用。这个钩子函数的函数是,如果一些在很多模版中都要用到的变量,那么就可以使用这个钩子函数来返回,而不用在每个视图函数中的render_template中去写,这样可以让代码更加简洁和好维护。
4. errorhandler:在发生一些异常的时候,比如404错误,比如500错误。那么如果想要优雅的处理这些错误,就可以使用errorhandler来出来。需要注意几点:

  • 在errorhandler装饰的钩子函数下,记得要返回相应的状态码。
  • 在errorhandler装饰的钩子函数中,必须要写一个参数,来接收错误的信息,如果没有参数,就会直接报错。
  • 使用`flask.abort`可以手动的抛出相应的错误,比如开发者在发现参数不正确的时候可以自己手动的抛出一个400错误。

示例代码:

 1 from flask import Flask,render_template,abort
 2 
 3 app = Flask(__name__)
 4 
 5 @app.route('/')
 6 def hello_world():
 7     # abort(404) # 指定任意的返回状态
 8     return render_template("index.html")
 9 @app.route("/list")
10 def my_list():
11     return render_template("list.html")
12 
13 @app.before_first_request
14 def before_first_request():
15     print("第一次请求之前的操作xxx")
16 
17 @app.before_request
18 def before_request():
19     print("在每一次请求之前的操作xxx")
20 # 如在每一次请求之前将session绑定到g对象上
21 
22 # 上下文处理器
23 @app.context_processor
24 def content_processor():
25     return {"current_username":"wangyi"}
26 # 函数名随意,用处举例:网站每个页面都有个个人中心,上面显示着当前的用户名
27 # 最后要返回一个字典,即使是空字典
28 # 在html里直接使用变量即可:{{ current_username }}
29 
30 @app.errorhandler(404)
31 def page_not_found(error):
32     return "您访问的页面不存在!"
33 # 错误处理,例如404错误,正常情况下会返回错误提示信息NOT Found,不够
34 # 友好,所以用这个错误处理钩子函数,展示自定义的错误信息 ,但是这时候状态码就是200 OK了,记得同时返回原状态码404
35 
36 
37 if __name__ == '__main__':
38     app.run()

 

posted @ 2020-05-02 09:28  天青色wy  阅读(257)  评论(0编辑  收藏  举报