我很难在路由发生之前尝试修改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