在使用Werkzeug之前,是否有办法编辑请求值(表单和参数)?
我需要将请求值从utf8编码为iso88591。我创建了一个处理这个问题的函数。
我想在所有表单值上使用此函数,以便我避免以下第二行:
lcl_var = request.form['post_arg']
lcl_var = encode_utf8_to_iso88591(lcl_var)
我无法从Werkzeug docs中弄清楚我需要什么。我想有一种方法可以继承Request类并覆盖其处理值的方法之一。非常感谢如何很好地实现这一点的具体例子。
答案 0 :(得分:2)
在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
。
这里有完整的例子: