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作为第一个参数
posted @ 2019-10-16 01:02  Never&say&die  阅读(162)  评论(0编辑  收藏  举报