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