请求和响应的周期执行顺序与异常和过滤器和模板语法

一、请求和响应的周期执行顺序与异常和过滤器和模板语法

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

总结

  1. before_request:可以为多个请求设置装饰器,执行顺序是谁在前面谁先执行,如果被before_request装饰的函数中出现了return返回则下面的被装饰的before_request函数将不会被执行;
  2. after_request:请求响应返回,被after_request装饰的函数执行的顺序将会从下到上运行,这是在源码中对函数执行;顺序进行反转了,before_request请求对于的after_request响应没有影响,有没有返回值都会执行;
  3. before_first_request: 在请求来的时候进行首先响应,并且只响应一次;
  4. teardown_request:只能捕获到异常,一旦出现异常在前端页面则会出错,不能进行返回;
  5. errorhandler(500):捕捉对应的异常处理,出现异常return可以返回到页面,前台不会报错,后台则会报错;
  6. template_global():设置全局的模板函数,在任何一个html中都可以使用;
  7. template_filter:设置过滤器,在前端使用,可以设置多个参数,使用很灵活;
posted @ 2021-11-06 20:06  RandySun  阅读(111)  评论(0编辑  收藏  举报