在Flask中钩子函数是使用特定的装饰器装饰的函数。钩子函数能够在正常执行的代码中,插入一段本身想要执行的代码。那么这种函数就叫作钩子函数。(hook)数据库
@app.before_first_request # 第一次访问的时候调用 def first_request(): print('first time request')
@app.before_request # 每次接受到请求的时候都会执行 def before_request(): if not hasattr(g,'user'): setattr(g,'user','xxxx')
teardown_appcontext:无论是否有异常,注册的函数都会在每次请求以后执行。flask
@app.teardown_appcontext def teardown(exc=None): if exc is None: db.session.commit() else: db.session.rollback() db.session.remove()
@app.template_filter def upper_filter(s): return s.upper()
@app.context_processor def my_context_processor(): return {'current_user':'xxx'}
@app.errorhandler(404) def page_not_found(error): return 'This page does not exist',404
from flask import abort def my_list(): # 若是user_id在数据库中不存在,这时候我就让他跳转到400错误 abort(400) # 抛出400错误
g绑定到了Local对象,是线程隔离的。该对象的做用是绑定数据,绑定的数据能够在全局使用!session
@app.route('/') def index(): username = request.args.get('username')
g.username = username # 绑定
log_a()
log_b()
log_c(
from flask import g def log_a(): print('log a %s' % g.username) def log_b(): print('log b %s' % g.username) def log_c(): print('log c %s' % g.username)