Django redirection externe avec paramètres de POST

j'essaie de créer une redirection dans une vue Django vers une url externe avec quelques paramètres get attachés à la requête. Après avoir fait quelques recherches et quelques essais, il semble que j'ai fait un blocage de route.

alors ma vue ressemble à quelque chose comme ça

def view(request):
    data = get.data(request)
    if something in data:
        return HttpResponseRedirect('example.com')

C'est ce que j'ai pu obtenir. Je sais que vous dans l'url de la requête peut spécifier certains paramètres comme ceci:

...
return HttpResponseRedirect('example.com?name=smith&color=brown')

Cependant, puisque certaines données sensibles, je ne veux pas à retrouver dans l'url. Puisque c'est une url externe, Je ne peux pas utiliser le raccourci redirect() qui accepte les paramètres des vues. Priez donc le dites, comment fait-on accomplir une telle tâche?

Modifier

après avoir fait un peu plus de recherche, et avoir chatté un peu dans IRC, il semble que ce que je devrais faire, pour garder le paramètre get loin des utilisateurs, contenant des informations de paiement, est de les envoyer comme poste à la place. J'ai été dit que vous devriez être en mesure de le faire en utilisant certains JS comme eh bien, éventuellement, jQuery. La question reste encore un peu plus compliquée. Comment créer une redirection post dans django à l'aide de javascript?

2ème Edition

on dirait que j'ai été mal informé. Merci pour éclaircir cela avec le rediriger les protocoles de M. Regarde comme je l'ai été d'aller dans le mauvais chemin dans ma tentative de l'utilisation de la redirection de résoudre ce problème.

16
demandé sur googletorp 2009-08-28 13:17:22

3 réponses

je suggère l'approche suivante. Dans votre formulaire Django view / template de retour au navigateur avec tous les paramètres que vous voulez afficher comme éléments de forme cachés. Dès que le formulaire sera chargé, le JavaScript le soumettra (POST) à l'endroit voulu.

Vue:

from django.shortcuts import render_to_response

def view(request):
    return render_to_response('test.html', { 'foo': 123, 'bar': 456 })

Modèle:

<html>
<head>
    <title>test</title>
     <script type="text/javascript">
     function load()
     {
          window.document.test.submit();
          return;
     }
     </script>
</head>
<body onload="load()">
<form name="test" method="post" action="http://www.example.com">
    <input type="hidden" name="foo" value={{ foo }} />
    <input type="hidden" name="bar" value={{ bar }} />
</form>
</body>
</html>
19
répondu Sergey Golovchenko 2009-08-28 13:53:47

les paramètres GET vont toujours dans L'URL, c'est ce qui les fait obtenir les paramètres.

il n'est pas possible de rediriger en utilisant les paramètres POST (qui ne vont pas dans L'URL) - c'est une restriction de HTTP, pas Django.

9
répondu Daniel Roseman 2009-08-28 09:37:27

Je ne suis pas D'accord avec Daniel, il y a un moyen de contourner la limitation HTTP de redirection seulement avec get params. ce que je pense est:

  1. redirigez vers une destination GET avec les params que vous voulez.
  2. sur la page GET, configurez un formulaire avec les params que vous avez transmis
  3. Auto soumettre le formulaire.

C'est ce que font la plupart des services de téléchargement de fichiers et parfois même des pages de paiement (Paypal et autres). il est en effet un peu laid (1 hop de plus) mais a ses propres avantages.

2
répondu Elad Meidar 2010-11-26 11:58:01