Flask快速入门(9) — 请求扩展
目录
1. before_request 请求之前
类比django中间件中的peocess_request,在请求收到之前绑定一个函数做一些事情,函数名可以为任意
@app.before_request
def before_ruquest1():
print('我是before_request1')
小结:
(1)可以写多个before_request函数
(2)在请求之前从上往下执行
(3)一旦 before_request 中有return返回值,请求的视图函数不会执行,已经剩下的 before_request 也不会执2
2. after_request 请求之后
类比django中间件中的process_response,每一个请求之后绑定一个函数,如果请求没有异常
@app.after_request
def after_request1(response):
print('我是after_request')
return response
小结:
(1)可以写多个after_resquest函数
(2)所有的after_request是从下往上执行,和before_request相反
(3)无论before_request有没有返回值,after_request都会执行
(4)必须接收response,而且必须返回response
3. before_first_request第一次请求时,与浏览器无关
@app.before_first_request
def before_first():
print('我是before_first_request')
小结:
(1)项目启动后,接收到的第一个请求时,会执行该函数,后面请求时就不会再执行了
(2)可以写多个before_first_request函数,没有返回值,写了也没有影响
4. teardown_request
每一个请求之后绑定一个函数,即使遇到了异常也会执行。用来检测异常,但是不能用来处理异常,可用作日志记录
@app.teardown_request
def teardown(e):
print(e)
print('我是teardown_request')
小结:
(1)这里e必须要传,是用来接收服务器抛出的异常,没有异常时,e为None
(2)无论服务器有没有异常,都会在after_request后执行该函数
(3)虽然能接收异常,但是没有办法处理异常
5. errorhandler
路径不存在时404,服务器内部错误500
@app.errorhandler(500)
def err_500(arg):
return '访问人数太多,请稍等'
@app.errorhandler(404)
def err_404(arg):
return '你访问的页面不存在'
小结:
(1)参数中的值为错误码
(2)当服务器抛出对应状态码的异常就会执行该函数
(3)并且该函数可以处理异常,让用户无法感知服务器错误
(4)每一个错误码,都需要一个对应的函数进行处理
6. template_global
作为全局变量可以直接在前台渲染
@app.template_global()
def template(a1,a2): # 函数名任意
return a1+a2
@app.route('/')
def index():
print('我是请求')
return render_template('test.html')
# 在test.html页面中,可以直接使用template()函数
{{template(1,2)}}
7. template_filter 过滤器
@app.template_filter()
def filter(a,b,c): # 函数名任意
return a+b+c
@app.route('/')
def index():
print('我是请求')
return render_template('test.html')
# 在test.html页面中,可以直接使用filter()函数
{{1|filter(2,3)}} # 1作为第一个参数