2009-07-15 23 views
9

Je viens de commencer à utiliser django. Je suis tombé sur des formulaires et j'ai besoin de savoir lequel est le meilleur moyen de valider un formulaire. Serait-ce en utilisant des formulaires django ou devrions-nous utiliser javascript ou un langage de script côté client pour le faire?Validation de formulaire dans django

+3

Vous obtiendrez beaucoup plus de lecteurs avec le tag 'django' qu'une sous-étiquette comme' django-forms'. Essayez toujours d'inclure au moins une balise pour la plate-forme/langue principale que vous utilisez (par exemple '.net',' java', 'django', etc.), surtout si vous n'avez pas atteint la limite de cinq balises. – Zifre

Répondre

16

Vous devez TOUJOURS valider votre formulaire côté serveur, la validation côté client n'est qu'une commodité pour l'utilisateur uniquement. Cela étant dit, Django forms a une variable form.errors qui indique si certains champs de formulaire étaient incorrects.

{{form.name_of_field.errors}} peut vous donner chaque erreur individuelle de chaque champ incorrectement rempli. Voir plus ici:

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

+4

Une chose que les docs * ne mentionnent pas est l'existence de {{form.non_field_errors}} lorsque vous voulez obtenir * juste * les erreurs qui s'appliquent au formulaire dans son ensemble. –

+0

Oui, je trouve que les docs manquent sur beaucoup de choses, ou ils ne vont tout simplement pas dans les détails. J'espère qu'à mesure que le cadre évoluera, les docs le feront aussi. – AlbertoPL

+0

Pour réitérer ce qu'a dit Alberto: La validation côté client n'est pas une validation. Tout le monde peut créer une requête POST ou GET. Le seul avantage réel que vous obtenez de la validation côté client est la «sensation Web 2.0 AJAXy» pour l'utilisateur, mais ce n'est pas la validation - cela se passe côté serveur. – ShawnMilo

5

Il y a une application Django connectables (django-ajax-forms) qui permet de valider les formulaires sur le côté client via JavaScript. Mais comme le dit AlbertoPL, utilisez la validation côté client uniquement comme une mesure d'utilisabilité (par exemple en disant à un utilisateur que son nom d'utilisateur désiré est déjà pris sans recharger la page d'inscription). Il y a toutes sortes de façons de contourner la validation côté client, dans la plupart des cas aussi simple que de désactiver JavaScript.

De manière générale: présumer que toutes les données provenant de l'extérieur sont défectueuses jusqu'à leur validation.

4

Nous venons d'arriver à django-floppyforms, qui semble effectuer la validation côté client par défaut. Ils utilisent HTML5 qui supporte la validation des clients par défaut. Je ne sais pas si elles utilisent également javascript si le navigateur ne supporte pas HTML5. Je ne l'ai pas encore essayé.

Lien vers django-floppyforms: Documentation et Github

0

Vous aurez besoin de faire est JS. This app intègre des formulaires avec parsley.js pour marquer les formulaires avec les attributs data- * corrects automatiquement.

2

Si vous utilisez bootstrap, vous pouvez simplement ajouter l'attribut requis dans le champ des formulaires. Par exemple, s'il y a champ programe alors vous pouvez le valider comme:

En forms.py:

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

Note: Il faut faire un lien vers bootstrap fichiers dans votre .html page de cette forme.

Questions connexes