IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Condition de validation d'un formulaire


Sujet :

Python

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Par défaut Condition de validation d'un formulaire
    Bonjour,

    j'ai créé un formulaire qui me permet d'ajouter des noms de machines à une liste, voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    lass Saisie_machines(forms.Form):
            ajout = forms.CharField(max_length=200)
     
    def Saisie(request):
            if request.method == 'POST':
                    form = Saisie_machines(request.POST)
                    if form.is_valid():
                            ajout = form.cleaned_data['ajout']
                            new_machine = Machine(nom=ajout)
                            new_machine.save()
                            return render(request,'dns_app/ajout.html', locals())
            else:
                    form = Saisie_machines()
     
            return render_to_response('dns_app/formulaire.html', { 'form': form, }, context_instance=RequestContext(request))
    Ce que je cherche à savoir faire, c'est validé ce formulaire et donc ajouter une nouvelle machine à la liste, seulement si le nom de celle-ci se terrmine par ".pmr".
    Une ER sera utilisée mais comment l'utiliser dans mon formulaire ?

    Merci pour votre aide

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Par défaut
    Salut,

    je connais pas trop django mais à première vue, je pense qu'il suffit de rajouter le test à base d'ER au même niveau que ton form.is_valid() pour avoir un truc de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if form.is_valid() and machine_name_valid(form.cleaned_data['ajout']):
    après faut bien entendu écrire la fonction machine_name_valid() pour réellement tester le nom avec l'expression régulière.

    mais si ça se trouve, y a un moyen de personaliser la méthode is_valid() de ton formulaire et d'y rajouter directement le test sur le nom de la machine.


    pour le test avec l'expression régulière, la méthode re.match() a des chances de t'interesser.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Par défaut
    Merci pour cette réponse et pour le nom de la méthode qui en effet m'intéresse !!

    Je ne suis pas sûre de maîtriser suffisamment Django pour savoir comment écrire une fonction machine_name_valid( ) mais je vais gratter là dessus.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Par défaut
    machine_name_valid() c'est juste un nom quelconque pour illustrer ce que doit faire la fonction.

    pour être plus précis, n'importe quelle fonction fera l'affaire tant qu'elle vérifie que le nom de la machine qui a été renseigné dans le formulaire se termine bien par ".pmr" et qu'elle retourne True quand c'est effectivement le cas et False sinon.

    cette fonction n'est pas spécifique à Django, c'est simplement du Python.
    à vrai dire, y a très certainement moyen de ne pas faire de fonction en plus et de tester directement le retour de re.match()

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Par défaut
    Sauriez-vous me dire comment spécifier dans re.match() que je souhaire appliquer l'ER au nom de la machine ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Par défaut
    la doc specifie que le prototype de la méthode match est celui:
    re.match(pattern, string[, flags])
    dans lequel
    • pattern est la chaine qui défini l'expression régulière
    • string est la chaine à vérifier (form.cleaned_data['ajout'] si je ne me trompe pas)
    • flags permet de fournir des options pour adapter le comportement de la vérification


    donc si l'expression régulière est la suivante: r".+\.pmr"
    et si le nom de la machine est contenu dans form.cleaned_data['ajout']
    alors tu devrais avoir un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    re.match(r".+\.pmr", form.cleaned_data['ajout'])

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Par défaut
    Merci bcp

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Hello,

    C'est un peu absurde de passer par de la regex pour ce genre de truc.

    les objets "chaînes" définissent une méthode pour ça : endswith

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    >>> ma_chaine = "trucmuche.pmr"
    >>> ma_chaine.endswith('.pmr')
    True

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Par défaut
    Bonjour et merci de ta réponse,

    Si ma_chaine = form.cleaned_data['ajout'], cela ne fonctionne pas...

    ma_chaine est en réalité une liste de machines qui s'agrandit à chaque ajout.

    Comment spécifier que ma_chaine = liste ?

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Par défaut
    Ou bien n'est-il pas possible qu'au moment de remplir le formulaire on est l'emplacement où écrire le nom de la machine avec .pmr d'afficher en bout de cet emplacement et que le tout soit envoyer à la base ?

    N'y aurait-il pas une doc là dessus ?

  11. #11
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Par défaut
    Citation Envoyé par django144 Voir le message

    Si ma_chaine = form.cleaned_data['ajout'], cela ne fonctionne pas...
    mille excuses erreur de ma part, cela fonctionne très bien !! encore merci

  12. #12
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Par défaut
    Citation Envoyé par Petibidon Voir le message
    Hello,

    C'est un peu absurde de passer par de la regex pour ce genre de truc.

    les objets "chaînes" définissent une méthode pour ça : endswith

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    >>> ma_chaine = "trucmuche.pmr"
    >>> ma_chaine.endswith('.pmr')
    True
    très juste.
    j'ai tendance à oublier cette méthode et son homoloque startswith()...

    mea culpa

  13. #13
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Par défaut
    Pourriez-vous me mettre sur la voie d'un champ de formulaire qui serait pré-rempli ? avec par exemple un mot au début et/ou à la fin de l'emplacement qui va permettre de renseigner la valeur, et de soumettre tout ceci ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Conditions de validation d'un formulaire
    Par Nono075 dans le forum VBA Access
    Réponses: 9
    Dernier message: 08/12/2013, 15h27
  2. Conditions pour remplissage d'un Formulaire
    Par budiste dans le forum Langage
    Réponses: 6
    Dernier message: 15/12/2005, 15h36
  3. Ouvrir une popup lors de la validation d'un formulaire
    Par pod1978 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/11/2005, 15h47
  4. Vérification de validation d'un formulaire
    Par tom06440 dans le forum Langage
    Réponses: 8
    Dernier message: 21/09/2005, 14h29
  5. Réponses: 11
    Dernier message: 16/09/2004, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo