Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Django] AttributeError at / 'dict' object has no

Passage de paramètre via POST

    14 septembre 2014 à 16:56:25

    Bonjour,

    je suis en train de découvrir Django grâce au livre "Apprendre la programmation web avec python et Django" (très bon livre au passage).

    Je suis donc en train de faire un formulaire d'authentification et je souhaiterai faire passer mes paramètre via la méthode POST.

    Voilà ce que j'ai écrit :

    Pour mon template: "login.html"

    {% extends "base.html"%}
    {% block title %}Connexion{% endblock %}
    {% block bodyId %}loginPage{% endblock %}
    {% block content %}
    <form action="login" method="post">{% csrf_token %}
        {% if error %}
        <p class="error">{{error}}</p>
        {% endif %}
        <p>
            <label for="email"> Courriel : </label>
            <input name="email" id="email" size="30" type="email"/>
        </p>
        <p>
            <label for="password">Mot de passe : </label>
            <input name="password" id="password" size="30" type="password"/>
        </p>
        <p>
            <input type="submit" value="Se connecter"/>
            <a href="">Créer un compte</a>
    </form>
    {% endblock %}

    Et pour ma vue :

    def login(request):
        c = {}
        c.update(csrf(request))
        if len(request.POST)>0:
            if 'email' not in request.POST or 'password' not in request.POST:
                error="veuillez entrer une adresse de courriel et un mot de passe."
                return render_to_response('login.html', {'error' : error},c)
            else:
                email = request.POST['email']
                password = request.POST['password']
                if password != 'sesame' or email !='pierrre@lxs.be':
                    error="adresse de courriel ou mot de passe erroné."
                    return render_to_response('login.html', {'error':error}, c)
                else:
                    return HttpResponseRedirect('/welcome')
        else:
            return render_to_response('login.html', c)


    Comme vous pouvez le voir, j'ai suivi la documentation de django pour remédier au problème de sécurité lié aux attaques Cross Site Request Forgeries.

    Mais voilà, au moment où je tente d'accéder à ma page web django me sors cette erreur:

    AttributeError at /

    'dict' object has no attribute 'push'

    Je ne comprends pas l'erreur et je ne vois vraiment pas ce qu'il faut faire à ce stade, quelqu'un a-t-il pour ce problème?

    Par avance merci pour votre aide,

    -
    Edité par Betesda629 14 septembre 2014 à 16:58:26

    • Partager sur Facebook
    • Partager sur Twitter
      15 septembre 2014 à 10:21:36

      Tu devrai commencer par analyser la stacktrace, c'est un très bon point de départ. Ça te permettra de voir à quelle moment se produit l'exception.

      Ensuite je te conseille vraiment de généraliser l'utilisation des points d'arrêts quand tu as un problème. Deux façons de les utiliser :

      # Ici tu importes pdb, puis tu utilises un méthode du module
      import pdb; pdb.set_trace()
      # Ou alors tu importe et en direct tu call la fonction
      # Ca ne change rien, sauf peut-être que la deuxième méthode est compatible avec la PEP-8 (mais bon c'est pas destiné à rester dans ton code donc on s'en fou)
      __import__('pdb').set_trace()
      
      

      Une fois que tu es dans le débugueur, tu peux regarder ce que contiennent tes variables, ou executer ton code pas à pas jusqu'a ce que tu tombes sur l'exception. Je pense que ça ne vient pas de ton code côté template mais bien du code côté serveur, vu que tu ne fais pas d'appelle à "push" dans ton template.

      J'ai l'impression que tu essayes de faire du javascript en utilisant un méthode nommée 'push'. En python ça n'existe pas.

      # Ajouter à un dictionnaire :
      >>> mon_dict = {}
      # Ou
      >>> mon_dict = dict()
      >>> mon_dict['toto'] = 'tata'
      >>> print(mon_dict)
      {'toto': 'tata'}
      
      # Ajouter à une liste :
      >>> ma_liste = []
      # Ou
      >>> ma_liste = list()
      >>> ma_liste.append('toto')
      >>> ma_liste.append('tata')
      >>> print(ma_liste)
      ['toto', 'tata']
      




      • Partager sur Facebook
      • Partager sur Twitter

      [Django] AttributeError at / 'dict' object has no

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown