2009-06-02 11 views
6

Immagino che questo implicherà regexp o qualcosa del genere, ma farò un tentativo. Al momento, un utente può interrompere un sito Web digitando qualcosa di simile a £$(*£$(£@$&£($ nel campo del titolo, che viene convertito in una lumaca utilizzando Django slugify.Convalida una lumaca in Django

Poiché nessuno di questi caratteri può essere convertito, Django restituisce un errore. La mia domanda è, che cosa dovrei inserire nel metodo di convalida del modulo per aumentare un forms.ValidationError quando l'utente utilizza un titolo come questo?

Grazie.

risposta

10

Questa domanda è vecchia di mezzo decennio quindi, aggiornando la mia domanda, dovrei spiegare che sto almeno facendo un cenno al passato dove alcune funzioni potrebbero non essere esistite.

Il modo più semplice per gestire le lumache nei moduli in questi giorni è utilizzare solo django.models.SlugField. Si valuterà per te e sottintenderà che questo campo è un indice.

Se non stai usando questo su un modello, è ancora possibile collegare nello stesso validatore che SlugField utilizza:

from django.core.validators import validate_slug 

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

Se si vuole solo fare dietro le quinte il controllo o lascia la tua validatore, puoi usare una tecnica simile per inserire la definizione di Django di una lumaca valida. E 'solo l'espressione regolare compilato che validate_slug sopra utilizza:

from django.core.validators import slug_re 

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

Non riesco a immaginare che cambierà, ma da soli di blocco per l'idea di Django di una lumaca, il candidato dovrà garantire la coerenza se Django non cambia un giorno.

+2

Sembra funzionare. Grazie mille amico. Nel metodo clean_field: se re.match ("[a-zA-Z0-9] +", potential_slug) == Nessuno: raise forms.ValidationError ("Il titolo non è intercambiabile.") – user116170

+0

Questa espressione regolare non viene eseguita t conto dell'uso MOLTO COMUNE dei trattini "-" nelle lumache. Inoltre, \ d è ridondante perché \ w copre anche le cifre. La risposta di Ben in basso è più corretta. – Humphrey

+0

La risposta di Ben in basso è più corretta. [a-zA-Z0-9] + non corrisponde né al trattino basso né al trattino, [\ w \ d] + corrisponde ai caratteri di sottolineatura ma non al trattino. –

12
SLUG_REGEX = re.compile('^[-\w]+$') 
+1

Credo che questa regex sia migliore di quella di Oli perché consente alle tue lumache di contenere "-". – Humphrey

Problemi correlati