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


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

    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:设置过滤器,在前端使用,可以设置多个参数,使用很灵活;
  • 相关阅读:
    “图”以致用组
    水体频率小组
    2021年云开发组三等奖作品展示
    毫秒级百万数据分页存储过程[欢迎转载]
    SQL Server 数据备份存储过程[原创]
    博客园居然被中国电信提醒有病毒,有图为证
    网络文件夹例子
    小技巧:在DropDownList数据绑定前插入固定文字
    ASP.NET整合Discuz!NT3.5实例说明(含用户登录、评论等)
    Visual Studio 2008的性能改进以及十大新功能(转)
  • 原文地址:https://www.cnblogs.com/randysun/p/15518204.html
Copyright © 2020-2023  润新知