web-dev-qa-db-fra.com

Comment envoyer un POST demande en utilisant dango?

Je ne veux pas utiliser le fichier html, mais seulement avec Django, je dois faire une demande POST.

Tout comme urllib2 envoie une requête get.

26
zjm1126

Une combinaison de méthodes d'urllib2 et d'urllib fera l'affaire. Voici comment je poste des données en utilisant les deux:

post_data = [('name','Gladys'),]     # a sequence of two element tuples
result = urllib2.urlopen('http://example.com', urllib.urlencode(post_data))
content = result.read()

urlopen () est une méthode que vous utilisez pour ouvrir des URL . urlencode () convertit les arguments en chaînes codées en pourcentage.

30
gladysbixly

Voici comment écrire l'exemple de la réponse acceptée à l'aide de python-requests:

post_data = {'name': 'Gladys'}
response = requests.post('http://example.com', data=post_data)
content = response.content

Beaucoup plus intuitif. Voir le Quickstart pour des exemples plus simples.

29
Rick Mohr

La seule chose que vous devriez regarder maintenant:

http://docs.python-requests.org/en/latest/

6
lajarre

Vous pouvez utiliser urllib2 dans Django. Après tout, c'est toujours du python. Pour envoyer une POST avec urllib2, vous pouvez envoyer le paramètre data (tiré de ici ):

urllib2.urlopen (url [ données] [ délai d'attente])

[..] la requête HTTP sera un POST au lieu d'un GET lorsque le paramètre data est fourni

4
Gabi Purcaru

Faites attention, quand vous utilisez ???? requests, et faites la demande POST en passant votre dictionnaire dans le paramètre data comme ceci:

payload = {'param1':1, 'param2':2}
r = request.post('https://domain.tld', data=payload)

vous transmettez les paramètres form-encoded.

Si vous souhaitez envoyer une demande POST avec uniquement JSON (type le plus courant d'intégration serveur à serveur), vous devez fournir un paramètre str() dans data. Dans le cas de JSON, vous devez import json lib et faire comme ceci:

 payload = {'param1':1, 'param2':2}
 r = request.post('https://domain.tld', data=json.dumps(payload))`

documentation est ici

0
Yuriy Shevchenko