我很難在路由發生之前嘗試修改Flask請求對象。如何覆蓋Flask模塊中PUT和DELETE的HTTP方法?
我的API模塊(不是我的整個Flask應用程序)依賴於通過發送特殊標頭來僞造PUT和DELETE操作。我需要檢查「-Method」頭的內容,並相應地修改Flask Request對象,然後Flask執行其路由。
這是短期,Python的,明確的代碼,我想工作:
@api.before_request
def method_scrubbing():
if request.headers.has_key('-Method'):
method = request.headers['-Method'].upper()
tagalog.log("in before_request, -Method = {}".format(method), 'force')
if method not in ['PUT', 'DELETE']:
raise ApiMethodException(method)
else:
request.method = method
...但我從WERKZEUG得到一個「只讀屬性」錯誤:http://drktd.com/74yk
我看起來Armin在http://flask.pocoo.org/snippets/38/的帖子,但這似乎是應用程序範圍內(不是特定於一個模塊)。
不太好用。如果我按照你所說的那樣做,並且將request.environ ['REQUEST_METHOD']'設置爲''PUT'','request.method'確實在之後立即顯示值爲''PUT''。然而,該請求仍然被路由到它將要去的地方(在這種情況下,到用'@ api.route('/ isoSpace//tile/',methods = ['POST'])裝飾的路線) ')。在該函數中,'request.method'再次看起來像「POST」。 –
2011-05-26 22:32:05
有沒有辦法讓中間件只適用於一個模塊? – 2011-05-26 22:36:28
WSGI層中不存在中間件。但是,您可以讓中間件執行一些基本路徑檢查。 – 2011-05-27 11:17:08