Question

Je suppose que cela va impliquer regexp ou quelque chose, mais je vais donner un coup de feu. A la minute, un utilisateur peut briser un site Web en tapant quelque chose de similaire à £$(*£$(£@$&£($ dans le champ du titre, qui est converti en une limace en utilisant Django slugify.

Étant donné qu'aucun de ces caractères peut être converti, Django renvoie une erreur. Ma question est, que dois-je mettre dans la méthode de validation de formulaire pour élever un forms.ValidationError lorsque l'utilisateur utilise un titre comme celui-ci?

Merci.

Était-ce utile?

La solution

Cette question est vieille d'une demi-décennie de sorte à mettre à jour ma question, je dois préciser que je suis au moins un signe de tête au passé où certaines fonctionnalités pourraient ne pas avoir existé.

La meilleure façon de gérer les limaces dans les formes ces jours-ci est d'utiliser juste django.models.SlugField. Il se valider pour vous et laisser entendre que ce domaine est un indice.

Si vous ne l'utilisez ceci sur un modèle, vous pouvez toujours accrocher dans le même validateur que SlugField utilise:

from django.core.validators import validate_slug

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

Si vous voulez juste faire derrière les coulisses de vérification ou d'écrire votre propre validateur, vous pouvez utiliser une technique similaire à tirer dans la définition de Django d'une limace valide. Il est juste le regex compilé validate_slug ci-dessus utilise:

from django.core.validators import slug_re

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

Je ne peux pas imaginer cela va changer, mais par vous-même de verrouillage à l'idée de Django d'une limace, vous assurer la cohérence si Django ne change un jour.

Autres conseils

SLUG_REGEX = re.compile('^[-\w]+$')
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top