zoukankan      html  css  js  c++  java
  • 自定义中间件

    一、自定义中间件

    """
    @author RansySun
    @create 2019-12-16-19:08
    """
    from flask import Flask, flash, get_flashed_messages, request
    
    app = Flask(__name__)
    
    
    class MyMiddleware:
        """
        实现自定义中间件
    
        """
        def __init__(self, wsgi_app123):
            self.wsgi_app123 = wsgi_app123
    
        def __call__(self, environ, start_response):
            print("request请求进来之前,请求来定义中间件")
            res = self.wsgi_app123(environ, start_response)
            print("response之后返回页面,请求走时定义中间件")
            print(res)
            return res
        	"""
        	结果:
        	request请求进来之前
    		response之后返回页面
    		<werkzeug.wsgi.ClosingIterator object at 0x03D81850>
        	"""
    
    	@app.route('/index')
    	def index():
        	# request.method
        	# session['sd']
    
        	return "中间件实现"
    if __name__ == '__main__':
        app.wsgi_app = MyMiddleware(app.wsgi_app)
        # app.__call__()
        app.run()
    
    

    总结:

    1. 实现自定义中间在执行在app执行前和执行后执行,查看源码可以知道

      # app.__call__()
      
          def __call__(self, environ, start_response):
              """The WSGI server calls the Flask application object as the
              WSGI application. This calls :meth:`wsgi_app` which can be
              wrapped to applying middleware."""
              return self.wsgi_app(environ, start_response)
           def wsgi_app(self, environ, start_response):
                  """The actual WSGI application. This is not implemented in
              :meth:`__call__` so that middlewares can be applied without
              losing a reference to the app object. Instead of doing this::
      
                  app = MyMiddleware(app)
      
              It's a better idea to do this instead::
      
                  app.wsgi_app = MyMiddleware(app.wsgi_app)
      
              Then you still have the original application object around and
              can continue to call methods on it.
      
              .. versionchanged:: 0.7
                  Teardown events for the request and app contexts are called
                  even if an unhandled error occurs. Other events may not be
                  called depending on when an error occurs during dispatch.
                  See :ref:`callbacks-and-errors`.
      
              :param environ: A WSGI environment.
              :param start_response: A callable accepting a status code,
                  a list of headers, and an optional exception context to
                  start the response.
              """
                  pa
      
      
  • 相关阅读:
    what's the python之if判断、while循环以及for循环
    what's the python之基本运算符及字符串、列表、元祖、集合、字典的内置方法
    what's the python之变量、基本数据类型
    what's the python之python介绍
    计算机基础系列之网络基础——网络协议
    计算机基础系列之何为操作系统
    计算机基础系列之计算机硬件
    EXT3_DX_ADD_ENTRY: DIRECTORY INDEX FULL!
    无shell情况下的mysql远程mof提权利用方法详解
    /bin/rm: Argument list too long解決方法
  • 原文地址:https://www.cnblogs.com/randysun/p/15518205.html
Copyright © 2011-2022 走看看