在Flask中钩子函数是使用特定的装饰器装饰的函数。 为什么叫做钩子函数呢,是因为钩子函数可以在正常执行的代码中,插入一段自己想要执行的代码。那么这种函数就叫做钩子函数
1.before_first_request : 处理第一次请求之前执行。列如以下代码
在执行视图函数之前执行这个函数 ,只执行一次
+ @app.before_first_request + def first_request(): + print("first time request")
2.before_requesrt: 在每次请求之前执行。通常可以用这个装饰器来给视图函数增加一些变量。一般这个就是在视图函数之前,我们可以把一些后面需要用到的数据先处理号,方便视图函数使用。列如以下代码
在每次执行视图函数之前都执行这个函数
+ @app.before_request + def before_request(): + if not hasattr(g,‘user‘): hasattr判断某个对象上面是否有这个属性 判断g对象上是否有‘user‘这个属性 + setattr(g, ‘user‘,‘xxx‘)
3.teardown_appcontext: 不管是否有异常,注册的函数都会在每次请求之后执行
+ @pp.teardown_appcontext + def teardown(exc = None): + if exc is None: + db.session.commit() + else: + db.session.rollback() + db.session.remove()
4.template_filter: 在使用Jinja2模板的时候自定义过滤器。比如可以增加一个upper的过滤器(当然Jinja2已经存在这个过滤器,本示例只是为了演示作用):
+ @app.template_filter + def upper_filter(s): + return s.upper()
5.context_processor: 上下文处理器, 返回的字典中的键可以在模板上下文中使用。列如:
使用这个钩子函数,必须返回一个字典。这个字典中的值在所有模板(html)中都可以使用。这个钩子函数的作用是,如果一些在很多模板中都要用到的变量,那么就可以使用这个钩子函数来返回,而不用在每个视图函数中的‘render_template‘中去写,这样可以让代码更加简洁和好维护
@app.context_processor return{‘current_user‘ : ‘xxx‘}
6.errorhandler: errorhandler接受状态码,可以自定义返回这种状态码的响应的处理方法。列如:
在发生一些异常的时候,比如404错误,比如500错误,那么如果想要优雅的处理这些错误,就可以使用‘errorhandle‘来处理,需要注意几点
在errorhandler装饰的钩子函数下,记得要返回相应的状态码
在errorhandler装饰的钩子函数中,必须要写一个参数,来接受错误的信息,如果没有参数,就会直接报错
使用"flask.abort"可以手动的抛出相应的错误,比如开发者在发现参数不正确的时候可以自己手动的抛出一个400错误 用法: abort(400)
示例代码如下
@app.errorhandler(404) def page_not_found(error): return "This page does not exist",404
原文:https://www.cnblogs.com/fengzi759/p/12152535.html