我猜这将涉及正则表达式或其他东西,但我会试一试。此时,用户可以通过£$(*£$(£@$&£($
在标题字段中键入类似的内容来破坏网站,使用 Django 将其转换为 slug slugify
。
因为这些字符都不能转换,所以 Django 返回一个错误。forms.ValidationError
我的问题是,当用户使用这样的标题时,我应该在表单验证方法中提出什么?
谢谢。
我猜这将涉及正则表达式或其他东西,但我会试一试。此时,用户可以通过£$(*£$(£@$&£($
在标题字段中键入类似的内容来破坏网站,使用 Django 将其转换为 slug slugify
。
因为这些字符都不能转换,所以 Django 返回一个错误。forms.ValidationError
我的问题是,当用户使用这样的标题时,我应该在表单验证方法中提出什么?
谢谢。
这个问题已经有五年历史了,所以在更新我的问题时,我应该解释一下,我至少是在向过去点头,其中某些功能可能不存在。
如今,处理表单中的 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 有一天真的改变了,你将确保一致性。
SLUG_REGEX = re.compile('^[-\w]+$')