• Flask中间件


    一、请求扩展

    # 1 before_request
        类比django中间件中的process_request,在请求收到之前绑定一个函数做一些事情 
    
    # 2 after_request
        类比django中间件中的process_response,每一个请求之后绑定一个函数,如果请求没有异常 
    
    #总结
        重点掌握before_request和after_request,
    
        注意有多个的情况,执行顺序
    
        before_request请求拦截后(也就是有return值),response所有都执行
    from flask import Flask,request
    
    app=Flask(__name__)
    
    @app.before_request
    def process():
        request.name='pdun'
        print('请求来的时候')
    
    @app.route('/')
    def index():
        print('index----',request.name)    #放的数据,可以取出来
        print('执行程序')
        return 'index'
    
    
    @app.after_request
    def text(response):       #需要带参数
        print('text----', request.name)
        print('请求走的时候')
        return response      #需要返回出去
    
    
    if __name__ == '__main__':
        app.run()
    简单使用
    #执行顺序和django中间件相似,来的时候从上往下,走的时候从下往上
    
    
    from flask import Flask,request
    
    app=Flask(__name__)
    
    @app.before_request
    def process():
        request.name='pdun'
        print('请求来的时候111')
    
    @app.before_request
    def process():
        request.name='pdun'
        print('请求来的时候222')
    
    
    @app.route('/')
    def index():
        print('执行程序')
        return 'index'
    
    
    @app.after_request
    def text(response):
        print('请求走的时候111')
        return response
    
    @app.after_request
    def text(response):
        print('请求走的时候222')
        return response
    
    
    if __name__ == '__main__':
        app.run()
    
    
    
    请求来的时候111
    请求来的时候222
    执行程序
    请求走的时候222
    请求走的时候111
    
    
    
    --------------------------------------------------------------
    
    如果请求来的时候返回了,请求的执行顺序,与django不同
    from flask import Flask,request
    
    app=Flask(__name__)
    
    @app.before_request
    def process():
        print('请求来的时候111')
        return 'xxxxxxxxxxx'                #来的时候就返回了,直接走请求走的代码
    
    @app.before_request
    def process():
        print('请求来的时候222')
    
    
    @app.route('/')
    def index():
        print('执行程序')
        return 'index'
    
    
    @app.after_request
    def text(response):
        print('请求走的时候111')
        return response
    
    @app.after_request
    def text(response):
        print('请求走的时候222')
        return response
    
    
    if __name__ == '__main__':
        app.run()
    
    
    
    
    请求来的时候111
    请求走的时候222
    请求走的时候111
    执行顺序,请求来的就返回的执行顺序
    #3 before_first_request
        服务一启动,第一次请求会走,以后再也不走了
    
    #4 teardown_request 
        无论是否出现异常,都会执行
    
    #5 errorhandler
        @app.errorhandler(404)       #可以写状态吗
        def error_404(arg):
            return "404错误了"
    
    #6 template_global            标签
        @app.template_global()
        def add(a1, a2):
            return a1 + a2
        #{{add(1,2)}}           #视图函数(执行程序)不需要传return add,模板层直接可以用
    
    #7 template_filter          过滤器
        @app.template_filter()
        def db(a1, a2, a3):
            return a1 + a2 + a3
        #{{ 1|db(2,3)}}           #与django不同,可以传多个参数 (django只支持传两个)
        
  • 相关阅读:
    SSAS维度成员中的非法XML字符[转]
    Java 的sun.jdbc.odbc桥连接的使用!
    SSAS全半角空格导致的AS处理错误[转]
    【原创】C# 如何自定义代码模版
    TO_DATE函数
    JDK Windows环境变量配置
    SSAS异常字符导致找不到属性键错误[转]
    SQL SERVER 数据库日期算法总结
    章节 2.1 可靠的软件 – 灵活,可靠的软件 使用设计模式和敏捷开发
    软件架构设计和Scrum潜在可交付产品,我(scrum master)和他(架构师)的讨论
  • 原文地址:https://www.cnblogs.com/pdun/p/11204883.html
Copyright © 2020-2023  润新知