钩子函数是指在执行函数和目标函数之间挂载的函数,框架开发者给调用方提供一个point-挂载点,至于挂载什么函数由调用方决定。
@before_first_request
在对应用程序实例的第一个请求之前注册要运行的函数,只会运行一次。
@before_request
在每个请求之前注册一个要运行的函数,每一次请求都会执行一次。
@after_request
在每个请求之后注册一个要运行的函数,每次请求完成后都会执行。需要接收一个 Response 对象作为参数,并返回一个新的 Response 对象,或者返回接收的 Response 对象。
@teardown_request
注册在每一个请求的末尾,不管是否有异常,每次请求的最后都会执行。
@context_processor
上下文处理器,返回的字典可以在全部的模板中使用。
@template_filter('upper')
增加模板过滤器,可以在模板中使用该函数,后面的参数是名称,在模板中用到。
@errorhandler(400)
发生一些异常时,比如404,500,或者抛出异常(Exception)之类的,就会自动调用该钩子函数。
1.发生请求错误时,框架会自动调用相应的钩子函数,并向钩子函数中传入error参数。
2.如果钩子函数没有定义error参数,就会报错。
3.可以使用abort(http status code)函数来手动终止请求抛出异常,如果要是发生参数错误,可以abort(404)之类的。
@teardown_appcontext
不管是否有异常,注册的函数都会在每次请求之后执行。
flask 为上下文提供了一个 teardown_appcontext 钩子,使用它注册的毁掉函数会在程序上下文被销毁时调用,通常也在请求上下文被销毁时调用。
比如你需要在每个请求处理结束后销毁数据库连接:app.teardown_appcontext 装饰器注册的回调函数需要接收异常对象作为参数,当请求被正常处理时这个参数将是None,这个函数的返回值将被忽略。