zoukankan      html  css  js  c++  java
  • flask中间件

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        print('视图函数中')
        return 'hello world'
    
    class my_middle:
    
        def __init__(self,wsgi_app):
            self.wsgi_app = wsgi_app
    
        def __call__(self, *args, **kwargs):
            print('中间件的代码上')
            obj = self.wsgi_app( *args, **kwargs)
            print('中间件的代码下')
    
            return obj
    
    if __name__ == '__main__':
       
        app.wsgi_app = my_middle(app.wsgi_app)
         # app.wsgi_app(environ, start_response)
        app.run()
        # 梳理一下 根据werkzeug我们可以知道 每次请求必然经历了app()
        # 所以我们要查看Flask的源码找到__call__方法
        # 找到了__call__方法后发现执行了return self.wsgi_app(environ, start_response)
        # 然后flask里面所有的内容调度都是基于这个self.wsgi_app(environ, start_response),这就是就是flask的入口
        # 如何实现中间件呢? 原理上就是重写app.wsgi_app,然后在里面添加上一些自己想要实现的功能。
        # 首先分析  app.wsgi_app需要加括号执行  所以我们把app.wsgi_app做成一个对象,并且这个对象需要加括号运行
        # 也就是会触发这个对象的类的__call__()方法
        # 1 那么就是app.wsgi_app=对象=自己重写的类(app.wsgi_app) ,我们需要在自己重写的类里面实现flask源码中的app.wsgi_app,在实例化的过程把原来的app.wsgi_app变成对象的属性
        # 2         app.wsgi_app() =对象() = 自己重写的类.call()方法
        # 3         那么上面的代码就可以理解了,在自己重写的类中实现了原有的__call__方法

     参考链接:https://blog.csdn.net/lipenghandsome/article/details/104998512

  • 相关阅读:
    第三周作业
    第二周作业
    第一次作业(2)
    第一次作业
    百度翻译新API C#版在 winform,Asp.Net的小程序
    ajax 里的数据请求
    结合css与javascript来实现手机移动端的屏幕滑动效果
    js公农历互转(1900~2100年)
    webpack命令
    vscode快速输出console.log
  • 原文地址:https://www.cnblogs.com/wzy23/p/13540618.html
Copyright © 2011-2022 走看看