我在AppEngine(http://code.google.com/appengine/articles/djangoforms.html)上使用Django表单验证框架,如下所示:
data = MyForm(data=self.request.POST)
if data.is_valid():
entity = data.save(commit=False)
entity.put()
我想知道在存储之前是否有办法预处理POST数据(删除恶意代码,HTML等)。看来任何表单验证库都应该提供类似的东西,不是吗?
由于
汉纳斯
答案 0 :(得分:2)
简短回答:
forms.is_valid()
通过调用名为clean()的方法自动填充字典forms.cleaned_data
。如果要进行任何自定义验证,请定义自己的'clean_filed_name',它返回已清理的字段值或引发forms.ValidationError()
。出错时,字段上的相应错误将自动填充。
答案很长:
答案 1 :(得分:1)
除了上面的答案,还有一个不同的观点:不要。使用尽可能少的处理存储用户输入,并在输出时清理数据。 Django模板为此提供了过滤器 - “escape”是一个可以转义所有HTML标签的过滤器。
这种方法优于在输入时清理数据的优点有两个:您可以随时更改数据清理方式,而无需“祖父”所有旧数据,当用户想要编辑某些内容时,您可以向他们显示他们输入的原始数据,而不是“清理”版本。在错误的时间清理数据也是双重逃避等问题的主要原因。
答案 2 :(得分:0)
是的,当然。您是否尝试过阅读表单文档?