Django slugfield '数字、字母、下划线和连字符'似乎没有强制执行

发布于 2024-11-16 12:44:53 字数 441 浏览 3 评论 0原文

我有一个如下所示的模型:

class Page(ContentBase):    
    url_slug = models.SlugField()

根据 SlugField 文档,slugfield 是“数字、字母、下划线和连字符”。然而,我似乎能够设置坏的 slugs,其中的字符超出了该规范:

page = Page.objects.get(id=872)
page.url_slug = '&*()&*(*(Y*'    
page.save()

In [26]: page.url_slug
Out[26]: '&*()&*(*(Y*'

这是为什么? SlugFields 是否应该根据文档实际验证其输入,还是我需要自己执行此操作?当我似乎能够如此轻松地避免它时,为什么文档会说明限制?

I have a model like the following:

class Page(ContentBase):    
    url_slug = models.SlugField()

Per the SlugField docs, slugfields are 'numbers, letters, underscores and hyphens'. However I seem to be able to set bad slugs which have characters outside that spec:

page = Page.objects.get(id=872)
page.url_slug = '&*()&*(*(Y*'    
page.save()

In [26]: page.url_slug
Out[26]: '&*()&*(*(Y*'

Why is this? Should the SlugFields actually be validating its input per the docs, or do I need to do this myself? Why does the documentation state the limit when I seem to be able to avoid it so easily?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

偷得浮生 2024-11-23 12:44:53

SlugField 的验证通过其匹配的 表单< /strong>.SlugField

class SlugField(CharField):
    default_error_messages = {
        'invalid': _(u"Enter a valid 'slug' consisting of letters, numbers,"
                     u" underscores or hyphens."),
    }
    default_validators = [validators.validate_slug]

如果没有表单手动修改,参考django.core.validators.validate_slug

slug_re = re.compile(r'^[-\w]+
)
validate_slug = RegexValidator(slug_re, _(u"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."), 'invalid')

SlugField's validation works through it's matching forms.SlugField:

class SlugField(CharField):
    default_error_messages = {
        'invalid': _(u"Enter a valid 'slug' consisting of letters, numbers,"
                     u" underscores or hyphens."),
    }
    default_validators = [validators.validate_slug]

If you modify it manually without a form, refer to django.core.validators.validate_slug:

slug_re = re.compile(r'^[-\w]+
)
validate_slug = RegexValidator(slug_re, _(u"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."), 'invalid')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文