J'apprends Django 1.6.
Je veux poster quelque JSON en utilisant HTTP POST demande et j'utilise Django pour cette tâche d'apprentissage.
J'ai essayé d'utiliser request.POST['data']
, request.raw_post_data
, request.body
mais aucun ne travaille pour moi.
mon point de vue.py est
import json
from Django.http import StreamingHttpResponse
def main_page(request):
if request.method=='POST':
received_json_data=json.loads(request.POST['data'])
#received_json_data=json.loads(request.body)
return StreamingHttpResponse('it was post request: '+str(received_json_data))
return StreamingHttpResponse('it was GET request')
Je poste des données JSON en utilisant demandes module.
import requests
import json
url = "http://localhost:8000"
data = {'data':[{'key1':'val1'}, {'key2':'val2'}]}
headers = {'content-type': 'application/json'}
r=requests.post(url, data=json.dumps(data), headers=headers)
r.text
r.text
devrait imprimer ce message et les données publiées, mais je ne parviens pas à résoudre ce problème simple. dites-moi s'il vous plaît comment collecter des données postées dans Django 1.6?
Vous confondez ici les données codées sous forme codée et JSON. request.POST['foo']
est destiné aux données codées en forme. Vous publiez du JSON brut, vous devriez donc utiliser request.body
.
received_json_data=json.loads(request.body)
Pour python3, vous devez d'abord décoder le corps:
received_json_data = json.loads(request.body.decode("utf-8"))