加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 如何在Flask MIddleware中访问请求

发布时间:2020-12-16 23:32:24 所属栏目:Python 来源:网络整理
导读:我想在中间件中访问request.url. Flask app – test.py from flask import Flaskfrom middleware import TestMiddlewareapp = Flask(__name__)app.wsgi_app = TestMiddleware(app.wsgi_app)@app.route('/')def hello_world(): return 'Hello World!'if __nam
我想在中间件中访问request.url.

Flask app – test.py

from flask import Flask
from middleware import TestMiddleware
app = Flask(__name__)

app.wsgi_app = TestMiddleware(app.wsgi_app)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

middleware.py:

from flask import request

class TestMiddleware(object):

    def __init__(self,app):
        self.app = app 

    def __call__(self,environ,start_response):
        # How do I access request object here.
        print "I'm in middleware"
        return self.app(environ,start_response)

我理解可以在Flask应用程序上下文中访问请求.我们通常使用

with app.test_request_context()

但在中间件中,我无法访问Flask app对象.

我该怎么办?

谢谢你的帮助..

解决方法

它是构造请求对象的应用程序对象:它在调用应用程序之前不存在,因此中间件无法事先查看它.但是,您可以在中间件中构建自己的请求对象(直接使用Werkzeug而不是Flask):
from werkzeug.wrappers import Request
req = Request(environ,shallow=True)

您甚至可以以相同的方式构造Flask自己的Request对象(flask.wrappers.Request,它是Werkzeug的Request类的子类).看看the source我没有看到任何阻止你这样做的东西,但是因为它不是那样设计的,你可能最好不要使用Werkzeug,除非你需要添加一个额外的属性Flask的子类.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读