验证Django中的slug

时间:2009-06-02 18:54:25

标签: python django validation slug

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

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

感谢。

2 个答案:

答案 0 :(得分:12)

这个问题已有五十年了,所以在更新我的问题时,我应该解释一下,我至少会对过去的某些功能可能不存在的过去点头。

现在处理表单中最简单的方法就是使用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关于slug的想法中,如果Django确实改变了一天,你将确保一致性。

答案 1 :(得分:12)

SLUG_REGEX = re.compile('^[-\w]+$')