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.
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>
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.
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:
- redirigez vers une destination GET avec les params que vous voulez.
- sur la page GET, configurez un formulaire avec les params que vous avez transmis
- 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.