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

Django Python Discussion :

Eviter le renvoi de données POST


Sujet :

Django Python

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 11
    Par défaut Eviter le renvoi de données POST
    Bonjour,

    Je suis amateur en développement web et je voudrais savoir quelle est la bonne pratique concernant la gestion des données POST.
    • Je déteste revenir en arrière sur un formulaire et devoir renvoyer les données pour avoir le droit de voir la page.
    • J'aime faire en sorte que tout envoi de données POST se fasse sur une url réservée au traitement des données qui redirige ensuite vers le formulaire initial (en sauvegardant les erreurs éventuelles dans la session). Je peux alors redessiner le formulaire avec les erreurs inlines, ou afficher un message de succès.


    Avec cette technique, je peux faire page-avant-page-arrière autant que je veux, il n'y aura aucun changement côté serveur (tant que pas de clic sur un bouton "submit"). Je trouve ça logique et plus agréable.

    Seulement je me rends compte que cette pratique n'est pas utilisée dans Django (http://docs.djangoproject.com/en/dev...-a-simple-form) ou dans l'application django-registration (http://bitbucket.org/ubernostrum/django-registration/) :

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    def register(request, backend, success_url=None, form_class=None,
                 disallowed_url='registration_disallowed',
                 template_name='registration/registration_form.html',
                 extra_context=None):
        backend = get_backend(backend)
        if not backend.registration_allowed(request):
            return redirect(disallowed_url)
        if form_class is None:
            form_class = backend.get_form_class(request)
     
        if request.method == 'POST':
            form = form_class(data=request.POST, files=request.FILES)
            if form.is_valid():
                new_user = backend.register(request, **form.cleaned_data)
                if success_url is None:
                    to, args, kwargs = backend.post_registration_redirect(request, new_user)
                    return redirect(to, *args, **kwargs)
                else:
                    return redirect(success_url)
        else:
            form = form_class()
     
        if extra_context is None:
            extra_context = {}
        context = RequestContext(request)
        for key, value in extra_context.items():
            context[key] = callable(value) and value() or value
     
        return render_to_response(template_name,
                                  {'form': form},
                                  context_instance=context)

    Ci-dessus dans la vue "register" on a un "if request.method == 'POST': else:".

    Quelle est l'inconvénient de ma méthode ?

    Merci

  2. #2
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    la méthode souvent utilisée est la suivante:
    1. Si la requête se fait en GET, un formulaire vide est créer et passé à la page.
    2. Si la requête se fait en POST et que les données sont invalides, la page est reaffiché avec les erreurs du formulaire.
    3. Si la requête se fait en POST et que les données sont valides, tout dépend..
      • Si les données sont à inserer dans la BDD (création, modification) , la modification est faite et la requête est une redirection (vers l'objet créer).
      • Si les données servent à récuperer des données (filtre) alors le formulaire est reafficher avec les valeurs correctes et le résultat du filtre.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 11
    Par défaut
    Mon problème se pose uniquement dans le cas 2.

    Mettons que tu cherches à remplir un formulaire d'inscription, et que tu échoues 3 ou 4 fois de suite à le remplir correctement, et que tu décides de revenir en arrière dans l'historique de navigation, tu vas te retrouver harceler par des "confirmation d'envoi de données POST" alors que tu n'en as que faire. D'où la solution de ne pas créer un formulaire d'inscription avec l'attribut action="".



    J'ai bon ?

  4. #4
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    tu vas te retrouver harceler par des "confirmation d'envoi de données POST" alors que tu n'en as que faire
    Quand je passe un commande sur internet, je suis plutôt content que mon navigateur me dise que je risque de commander ou de payer une deuxième fois. Je pense que c'est normale de prévenir l'utilisateur.

    Maintenant, as-tu ce problème avec Django? J'ai essayé le formulaire d'admin avec des rafraichissement de page et des pages précedentes, et je n'ai pas eu les messages de confirmation.

Discussions similaires

  1. Empêcher le renvoi des données POST
    Par stc074 dans le forum JSF
    Réponses: 0
    Dernier message: 19/11/2013, 18h53
  2. Eviter le renvoi de données POST
    Par ThinkerR dans le forum Langages serveur
    Réponses: 0
    Dernier message: 16/11/2010, 23h08
  3. Réponses: 2
    Dernier message: 07/07/2010, 17h19
  4. Réponses: 1
    Dernier message: 27/04/2007, 14h02
  5. Réponses: 9
    Dernier message: 03/11/2006, 10h30

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