请求和响应的周期执行顺序与异常和过滤器和模板语法
一、请求和响应的周期执行顺序与异常和过滤器和模板语法
from flask import Flask, request, render_template
app = Flask(__name__)
'''
可以多个请求之前的函数
执行顺序是谁在前面谁先执行
如果前面的before_request有return返回值,后面的请求函数将都不会执行
'''
@app.before_request
def request_before1():
print("before_ request")
print("请求之前跳转1")
# return "请求跳转1"
@app.before_request
def request_before2():
print("before_ request")
print("请求之前跳转2")
'''
可以在请求之后添加多个after_request
执行顺序是谁在前面谁后执行, 这是在源码中对函数执行顺序进行了反转
before_request对我的after_request没有影响,有没有返回值都会执行
'''
@app.after_request
def request_after1(response):
print("response 响应页面1")
return response
@app.after_request
def request_after2(response):
print("response 响应页面2")
return response
@app.before_first_request
def first():
print("请求来值执行一次,并且是最先执行")
"""
无论有没有异常都会执行,有异常会把异常传递进来
"""
@app.teardown_request
def request_exception(e):
"""只能够捕捉异常"""
print('错误异常', e)
# 不会响应页面
# return ("500 错误")
@app.errorhandler(500)
def error_500(e):
print("服务器错误", e)
# 响应页面
return ("500 错误")
@app.template_global()
def globals_fun(a1, a2):
"""设置全局的html页面响应,模板语法的使用"""
return a1 + a2
@app.template_filter
def filter_fun(a1, a2, a3):
"""
自定义过滤器,可以随意传值,作为参数
:param a1:
:param a2:
:param a3:
:return:
"""
return a1 + a2 + a3
@app.route("/")
def index():
print("我是真的响应函数")
# a 错误产生
return render_template("index.html")
if __name__ == '__main__':
app.run()
总结
- before_request:可以为多个请求设置装饰器,执行顺序是谁在前面谁先执行,如果被before_request装饰的函数中出现了return返回则下面的被装饰的before_request函数将不会被执行;
- after_request:请求响应返回,被after_request装饰的函数执行的顺序将会从下到上运行,这是在源码中对函数执行;顺序进行反转了,before_request请求对于的after_request响应没有影响,有没有返回值都会执行;
- before_first_request: 在请求来的时候进行首先响应,并且只响应一次;
- teardown_request:只能捕获到异常,一旦出现异常在前端页面则会出错,不能进行返回;
- errorhandler(500):捕捉对应的异常处理,出现异常return可以返回到页面,前台不会报错,后台则会报错;
- template_global():设置全局的模板函数,在任何一个html中都可以使用;
- template_filter:设置过滤器,在前端使用,可以设置多个参数,使用很灵活;
在当下的阶段,必将由程序员来主导,甚至比以往更甚。