- 钩子函数
钩子函数是指在执行函数和目标函数之间挂载的函数, 框架开发者给调用方提供一个point -挂载点, 至于挂载什么函数有我们调用方决定, 这样大大提高了灵活性
- 常用的钩子函数
-
before_first_request
处理第一次请求之前执行
# 服务器被第一次访问执行的钩子函数
@app.before_first_request
def first_request():
print("Hello World")
-
before_request
在每次请求之前执行. 通常使用这个钩子函数预处理一些变量, 视图函数可以更好调用
# 在服务器接收的请求还没分发到视图函数之前执行的钩子函数
@app.before_request
def before_request():
# print("我勾住了每次请求")
user_id = session.get("user_id")
if user_id:
g.user = "DaYe"
-
teardown_appcontext
当APP上下文被移除之后执行的函数, 可以进行数据库的提交或者回滚
@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()
-
context_processor
上下文处理器, 返回的字典可以在全部模板中使用
@app.context_processor()
def context():
# 必须返回一个字典
# hasattr(obj, attr) 判断obj是否有attr属性, 注意此时的attr应该是字符串
if hasattr(g, "user"):
return {"current_username": "DaYe"}
else:
# 注意: 必须返回一个字典
return {}
-
errorhander
, 在发生一些异常时, 比如404错误, 就会自动调用对应的钩子函数
- 发生请求错误时, 框架会自动调用相对钩子函数, 并向钩子函数传入
error
参数
- 如果钩子函数没有定义
error
参数, 就会报服务器错误
- 开发者可以通过
flask.abort
方法手动抛出异常, 比如发现输入的参数错误可以使用abort(404)
来解决
@app.errorhander(404)
def page_not_found(error):
return render_template("error400.html"), 404
@app.errorhander(500)
def server_error(error):
return render_template("error505.html"), 500
以下为授权协议. 当你引用本文时, 默认你同意本协议.
凭此协议, 你可以在不通知作者的情况下, 对本文进行修改,转发或者进行商业行为. 但是你无权修改 ,删除本协议.
@Auther: DaYe
@Email: yesongsheng@163.com
@Time: 5/2/2018 15:25
感谢你自觉遵守本协议