![](/img/trans.png)
[英]How to access wsgi params from a request inside a middleware and a flask request without side effect?
[英]How to access request in Flask Middleware
我想在中間件中訪問 request.url。
Flask 應用程序 - 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()
中間件.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 應用程序對象。
我該如何進行?
謝謝你的幫助..
它是構建請求對象的應用程序對象:它在應用程序被調用之前不存在,因此中間件無法事先查看它。 但是,您可以在中間件中構建自己的請求對象(直接使用 Werkzeug 而不是 Flask):
from werkzeug.wrappers import Request
req = Request(environ, shallow=True)
您甚至可以以同樣的方式構造 Flask 自己的 Request 對象( flask.wrappers.Request
,它是 Werkzeug 的 Request 類的子類)。 查看源代碼,我沒有看到任何可以阻止您這樣做的內容,但是由於它不是設計為以這種方式使用的,因此您最好堅持使用 Werkzeug ,除非您需要添加額外的屬性之一通過 Flask 的子類。
中間件介於WSGI server
和Flask Application
。 request
對象是在Flask Application
創建的。 所以中間件中沒有任何request
對象。
也許您需要在視圖之前調用一個@before_request
處理程序?
在應用程序找到 URL 規則並創建它之前,您不能擁有Request
對象。 但是,在應用程序完成其操作后,您可以在environ
找到Request
對象:
environ['werkzeug.request']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.