10

これには正規表現か何かが関係すると思いますが、試してみます。その瞬間、ユーザーはタイトル フィールドに のようなものを入力することで Web サイトを破ることができ£$(*£$(£@$&£($、これは Django を使用してスラッグに変換されslugifyます。

これらの文字は変換できないため、Django はエラーを返します。forms.ValidationError私の質問は、ユーザーがこのようなタイトルを使用したときにフォーム検証メソッドに何を入れて a を発生させるべきですか?

ありがとう。

4

2 に答える 2

19

この質問は5年前のものなので、質問を更新する際に、少なくとも一部の機能が存在しなかった可能性のある過去にうなずいていることを説明する必要があります。

最近のフォームでスラッグを処理する最も簡単な方法は、単に を使用することdjango.models.SlugFieldです。それ自体が検証され、このフィールドがインデックスであることを暗示します。

モデルでこれを使用していない場合でも、SlugField が使用する同じバリデーターをフックできます。

from django.core.validators import validate_slug

slug = forms.CharField(..., validators=[validate_slug])

舞台裏でチェックしたり、独自のバリデータを書きたいだけの場合は、同様の手法を使用して、有効なスラッグの Django の定義を取り込むことができます。上記のvalidate_slugが使用するのは、コンパイルされた正規表現です。

from django.core.validators import slug_re

if slug_re.match(...):
    ...

それが変わるとは想像できませんが、Django のスラッグの考え方に固執することで、Django がいつか変更された場合でも一貫性を確保できます。

于 2009-06-02T18:59:15.293 に答える
12
SLUG_REGEX = re.compile('^[-\w]+$')
于 2011-06-24T10:03:14.997 に答える