Werkzeug 文档中存在关于扩展请求解析的有限示例。它有点埋没,但它是健全的。
http://werkzeug.pocoo.org/docs/request_data/#how-to-extend-parsing
由于 Werkzeug 是 HTTP 上的一个非常低级的工具,因此该功能也可以在您的请求调度程序中实现(假设结构类似于 Werkzeug 教程中的结构,该函数将 url 映射应用于请求。)
编辑:
似乎根据 Werkzeug 文档,最好的方法是从流中处理您自己的请求属性。这样做会很好,这是一种保留request.form
属性不变性的方法:
def encode(value):
#Your logic for the new dict vals
return 'foo!'
class MixInRequest(Request):
max_content_length = 1024 * 1024 * 4
@cached_property
def lcl_data(self):
if self.method in ['POST','PUT','PATCH']:
fields = dict([(key, encode(val)) for (key,val) in self.form.items()])
return ImmutableMultiDict(fields)
return None
这将设置一个请求属性lcl_data
(以您的函数命名),该属性将在首次访问时解析并为后续调用缓存。它仅适用于将填充的方法request.form
。
完整的例子在这里:
https://gist.github.com/DeaconDesperado/7292574