如何解决如何在Flask模块中为PUT和DELETE覆盖HTTP方法?
| 在路由发生之前,我很难尝试修改Flask请求对象。 我的API模块(不是我的整个Flask应用程序)依赖于通过发送特殊标头来伪造PUT和DELETE操作。我需要在Flask进行路由之前,检查\“-Method \”标头的内容并相应地修改Flask Request对象。 这是我想工作的简短的,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
我似乎在http://flask.pocoo.org/snippets/38/上看到了Armin的帖子,但这似乎是应用程序范围的(并非特定于模块)。
解决方法
Werkzeug假设仅在WSGI中间件中或在Werkzeug可以访问数据之前才修改请求。原因是这样,Werkzeug不必监视WSGI环境来查看是否必须使缓存无效或更改行为。
在这种特殊情况下,如果您仔细修改底层WSGI环境,可能会成功:
request.environ[\'REQUEST_METHOD\'] = \'something\'
之后,request.method
应该显示\“ something \”,并且行为应更改为形式解析。我还没有尝试过,也不知道它是否有效。我个人将编写一个中间件来为整个应用程序进行重写,或者为该行为做一些简单的URL前缀匹配。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。