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