• 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只支持传两个)
        
  • 相关阅读:
    google jQuery 1.4.2引用文件,jQuery 1.4.2 引用地址,jQuery引用地址
    html input checkbox js,jQuery
    HTML <fieldset> 标签
    ul 水平,行内块放置,取消点点
    C# Xml 操作
    DropDownList 下拉菜单控件
    jQuery,js : missing)after argument list
    PHP会员权限设计
    主流ETL工具选型
    windows XP下MySQL Cluster集群安装配置 .
  • 原文地址:https://www.cnblogs.com/pdun/p/11204883.html
Copyright © 2020-2023  润新知