在AppEngine上使用Django表单验证框架:如何去除HTML等?

1 投票
3 回答
821 浏览
提问于 2025-04-15 14:19

我在AppEngine上使用Django表单验证框架,链接是:http://code.google.com/appengine/articles/djangoforms.html,代码如下:

data = MyForm(data=self.request.POST)
  if data.is_valid():
    entity = data.save(commit=False)
    entity.put()

我想知道有没有办法在存储之前处理一下POST数据(比如去掉恶意代码、HTML等)。看起来任何表单验证库应该都提供类似的功能,对吧?

谢谢

汉尼斯

3 个回答

0

当然可以。你有没有试着去看看表单的文档呢?

http://docs.djangoproject.com/en/dev/ref/forms/validation/

1

除了上面提到的答案,还有一个不同的看法:不要。尽量少处理用户输入的数据,存储时保持原样,然后在输出时再进行清理。Django的模板提供了一些过滤器,比如'escape',可以用来处理所有的HTML标签。

这种方法相比于在输入时就清理数据有两个好处:第一,你可以随时改变清理数据的方法,而不需要去处理所有旧数据;第二,当用户想要编辑某些内容时,你可以展示他们最初输入的原始数据,而不是已经“清理过”的版本。在错误的时机清理数据也常常会导致一些问题,比如重复清理。

2

简短回答:

forms.is_valid() 会自动填充一个叫 forms.cleaned_data 的字典,这个过程是通过调用一个叫 clean() 的方法来完成的。如果你想进行自定义的验证,可以定义一个自己的 'clean_filed_name' 方法,这个方法要么返回处理过的字段值,要么抛出 forms.ValidationError() 错误。如果出现错误,相关字段的错误信息会自动填充。

详细回答:

查看文档

撰写回答