1

次のようなモデルがあります。

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

SlugField のドキュメントによると、slugfields は「数字、文字、アンダースコア、およびハイフン」です。ただし、その仕様外の文字を持つ悪いスラッグを設定できるようです:

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

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

どうしてこれなの?SlugFields は実際にドキュメントに従って入力を検証する必要がありますか、それとも自分でこれを行う必要がありますか? 簡単に回避できるように見えるのに、ドキュメントに制限が記載されているのはなぜですか?

4

1 に答える 1

4

SlugFieldの検証は、一致するフォームを介して機能します。.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')
于 2011-06-22T11:35:49.837 に答える