2009-07-15 25 views
9

Ho appena iniziato a usare django. Mi sono imbattuto in moduli e ho bisogno di sapere qual è il modo migliore per convalidare un modulo. Userebbe i moduli django o dovremmo usare javascript o qualche linguaggio di scripting lato client per farlo?Convalida modulo in django

+3

Otterrete molti più spettatori con il tag 'django' di una sottotag come' django-forms'. Cerca sempre di includere almeno un tag per la piattaforma/lingua principale che stai utilizzando (come '.net',' java', 'django', ecc.), Specialmente quando non hai raggiunto il limite di cinque tag. – Zifre

risposta

16

È consigliabile SEMPRE convalidare il modulo sul lato server, la convalida lato client è solo una comodità per l'utente.

Detto questo, le forme di Django hanno un form.errors variabile che mostra se alcuni campi modulo non erano corretti.

{{form.name_of_field.errors}} può darti ogni singolo errore di ogni campo che è stato compilato in modo errato. Vedere più qui:

http://docs.djangoproject.com/en/dev/topics/forms/

+4

Una cosa che i documenti * non * menzionano è l'esistenza di {{form.non_field_errors}} per quando si desidera ottenere * solo * gli errori che si applicano al modulo nel suo complesso. –

+0

Sì, trovo che i documenti perdano un sacco di cose, o semplicemente non entrano nei dettagli. Spero che man mano che il framework evolve, i doc fanno altrettanto. – AlbertoPL

+0

Per ripetere ciò che Alberto ha detto: la validazione lato client non è una convalida. Chiunque può creare una richiesta POST o GET. L'unico vantaggio effettivo ottenuto dalla convalida sul lato client è il "Web 2.0 AJAXy feel" per l'utente, ma non la convalida, che avviene sul lato server. – ShawnMilo

5

C'è un app Django pluggable (django-ajax-forms) che aiuta a validare moduli sul lato client tramite JavaScript. Tuttavia, come dice AlbertoPL, utilizzare la convalida lato client solo come misura di usabilità (ad esempio, dire a un utente che il nome utente desiderato è già stato preso senza ricaricare la pagina di registrazione). Ci sono tutti i tipi di modi per aggirare la validazione lato client, nella maggior parte dei casi semplice come disattivare JavaScript.

In generale: presumere tutti i dati provenienti dall'esterno come difettosi fino a convalidati.

4

Appena arrivato attraverso django-floppyforms, che sembra fare la validazione clientide di default. Utilizzano HTML5 che supporta la convalida del client per impostazione predefinita. Non sono sicuro se usano javascript anche se il browser non supporta HTML5. Non ho ancora provato da solo.

Link django-floppyforms: Documentation e Github

0

Sarà necessario fare questo è JS. This app integra i moduli con parsley.js per etichettare i moduli con gli attributi data- * corretti automaticamente.

2

Se si utilizza il bootstrap, è possibile semplicemente aggiungere l'attributo richiesto nel campo moduli. Per esempio, se c'è campo programmi allora è possibile convalidare le cose come:

In forms.py:

programme = forms.ChoiceField(course_choices,required=True, widget=forms.Select(attrs={'required':'required'})) 

Nota: Si richiede di collegare il bootstrap file nella .html pagina di quel modulo.

Problemi correlati