web-dev-qa-db-fra.com

Comment recevoir des données json en utilisant HTTP POST demander dans Django 1.6?

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?

50
Alok Singh Mahor

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)
93
Daniel Roseman

Pour python3, vous devez d'abord décoder le corps:

received_json_data = json.loads(request.body.decode("utf-8"))
58
Thran