我猜这将涉及正则表达式或其他什么,但我会试一试。在某一刻,用户可以通过在标题字段中键入类似£$(*£$(£@$&£($
的内容来破坏网站,使用Django slugify
将其转换为slug。
因为这些字符都不能转换,所以Django会返回错误。我的问题是,当用户使用这样的标题时,我应该在表单验证方法中添加forms.ValidationError
?
感谢。
答案 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]+$')