Django-fr

Forum

#1 01-01-2011 14:37:17

beegees
Membre
Inscription : 26-12-2010
Messages : 66

[débutant] Question sur is_valid

Bonjour tout le monde et bonne année à tous,

Question à propos de is_valid() :

Dans le django_book en français, je lis ceci :

Pour savoir si le formulaire est lié à des
données valides ou pas, appelez la
méthode is_valid() :

1) En utilisant is_valid(), on sait d'office que le formulaire est lié ?on
2) Qu'est-ce qu'un formulaire lié ?
3) Quel genre d'informations vérifie is_valid et comment le vérifie-t'il ?

Merci d'avance pour votre aide.

beegees

Hors ligne

#2 01-01-2011 15:31:55

quinode
Membre
Lieu : Auvergne
Inscription : 14-10-2010
Messages : 89
Site Web

Re : [débutant] Question sur is_valid

Tout d'abord bonne année à toi aussi
En anglais on dit "bound" pour dire si le formulaire est relié à des données

un formulaire est comme un formulaire...vide, qui a des cases formatées selon sa config (pour un ModelForm, les cases sont les champs du modèle).
Lié ou Bound, c'est juste un autre état du même form : avec des données dans les cases.

Donc ça n'a pas de sens de tester is_valid si tu n'as pas rattachés des données à ton formulaire

Comment on mets des données dans le formulaire ?
tu le fais soit en passant un dictionnaire de données

data = {'nom_du_champ':'valeur',...}
form = MonForm(data)

soit en passant des données postées sur le site :

form = MonForm(request.POST)

après avoir fait l'une de ces deux choses, tu peux tester is_valid()

if form.is_valid():
    ....

Ah oui, ça teste quoi : les validations "standards" des champs utilisés (Intergerfield n'acceptera pas une chaine de caractères) + toutes les règles de validation que tu veux (voir les docs, fonctions clean_ ou les validators)

Dernière modification par quinode (01-01-2011 15:34:30)

Hors ligne

#3 01-01-2011 15:38:58

beegees
Membre
Inscription : 26-12-2010
Messages : 66

Re : [débutant] Question sur is_valid

Tout d'abord bonne année à toi aussi

Merci et merci aussi pour ta réponse.


Comment on mets des données dans le formulaire ?

Donc, le fait de mettre des données dans des inputs, c'est lier le formulaire ?

J'ai ce code :

if request.method == "POST":
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():

Je présume qu'il va vérifier quelque part que le user beegees a mis le bon nom d'utilisateur et le bon mot de passe ?

Il faut l'indiquer quelque part la correspondance entre un username et un mot de passe ? mais où ?

Encore merci pour ton aide.

beegees

Dernière modification par beegees (01-01-2011 15:41:13)

Hors ligne

#4 01-01-2011 15:42:24

quinode
Membre
Lieu : Auvergne
Inscription : 14-10-2010
Messages : 89
Site Web

Re : [débutant] Question sur is_valid

Mettre les données, appuyer sur submit...
et dans ta view traiter ces données postées en créant une instance "liée" de ce Form :

if request.method == 'POST' :
    form = MonForm(request.POST)

là, ton formulaire est bien lié aux données postées

Hors ligne

#5 01-01-2011 15:46:43

beegees
Membre
Inscription : 26-12-2010
Messages : 66

Re : [débutant] Question sur is_valid

Merci pour tes explications.

J'ai modifié entre temps mon message :

Il faut l'indiquer quelque part la correspondance entre un username et un mot de passe ? mais où ?

Encore merci pour l'aide.

beegees

Hors ligne

#6 02-01-2011 17:39:30

quinode
Membre
Lieu : Auvergne
Inscription : 14-10-2010
Messages : 89
Site Web

Re : [débutant] Question sur is_valid

Houla j'avais pas vu que ton exemple parlait d'authentification
Si tu es dans un schéma d'authentification spécifique (qui n'utilise pas les modèles django.contrib.auth.User ) t'es en manuel là...

Tu doit définir pour ton objet Form une méthode clean(self) qui  va indiquer un process de validation impliquant tes deux champs :
- je valide que le username existe (attention, is_valid() ne fera pas ça, il verifiera juste le type de données postées...integer, char, date...)
- je loade l'instance de ce user, et compare le pass stocké ( mon_instance_user.password ) au pass envoyé ( self.cleaned_data['password'] )

Tout est expliqué là :
http://docs.djangoproject.com/en/dev/re … each-other

Hors ligne

Pied de page des forums