10

我猜这将涉及正则表达式或其他东西,但我会试一试。此时,用户可以通过£$(*£$(£@$&£($在标题字段中键入类似的内容来破坏网站,使用 Django 将其转换为 slug slugify

因为这些字符都不能转换,所以 Django 返回一个错误。forms.ValidationError我的问题是,当用户使用这样的标题时,我应该在表单验证方法中提出什么?

谢谢。

4

2 回答 2

19

这个问题已经有五年历史了,所以在更新我的问题时,我应该解释一下,我至少是在向过去点头,其中某些功能可能不存在。

如今,处理表单中的 slug 最简单的方法就是使用django.models.SlugField. 它将为您验证自身并暗示该字段是一个索引。

如果你没有在模型上使用它,你仍然可以挂钩 SlugField 使用的同一个验证器:

from django.core.validators import validate_slug

slug = forms.CharField(..., validators=[validate_slug])

如果您只想进行幕后检查或编写自己的验证器,您可以使用类似的技术来引入 Django 对有效 slug 的定义。它只是上面 validate_slug 使用的编译正则表达式:

from django.core.validators import slug_re

if slug_re.match(...):
    ...

我无法想象它会改变,但是通过将自己锁定在 Django 的蛞蝓想法中,如果 Django 有一天真的改变了,你将确保一致性。

于 2009-06-02T18:59:15.293 回答
12
SLUG_REGEX = re.compile('^[-\w]+$')
于 2011-06-24T10:03:14.997 回答