在Django中验证slug
我猜这可能需要用到正则表达式或者其他什么东西,但我还是试试吧。现在,用户在网站的标题字段里输入类似于 £$(*£$(£@$&£($
这样的内容,就会导致网站出问题,这些内容会被Django的 slugify
转换成一个“友好的”链接。
因为这些字符都无法被转换,所以Django会返回一个错误。我的问题是,我应该在表单验证的方法里加些什么,才能在用户使用这样的标题时抛出一个 forms.ValidationError
呢?
谢谢。
2 个回答
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后把它放到另一个地方。这个过程就像是把水从一个水桶倒到另一个水桶一样。
有些时候,我们会遇到一些问题,比如数据格式不对,或者数据不完整。这就像是你在倒水的时候,发现水桶有个洞,水流出去了一样。
为了避免这些问题,我们可以使用一些工具和方法来确保数据的安全和完整。比如,我们可以检查数据的格式,确保它符合要求,就像在倒水之前先检查水桶有没有破损。
总之,处理数据的时候,我们要小心谨慎,确保每一步都能顺利进行,这样才能得到我们想要的结果。
SLUG_REGEX = re.compile('^[-\w]+$')
这个问题已经有五年了,所以在更新我的问题时,我得提一下,过去的一些功能可能并不存在。
现在处理表单中的“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 对 slug 的定义,就能确保在未来如果 Django 有所更改时,你的代码也能保持一致。