web-dev-qa-db-de.com

Wie erhalte ich JSON-Daten über HTTP? POST request in Django 1.6?

Ich lerne Django 1.6.
Ich möchte einige JSON über HTTP POST request und ich verwende Django für diese Lernaufgabe.
Ich habe versucht, request.POST['data'], request.raw_post_data, request.body aber keiner arbeitet für mich.
meine ansichten.py is

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')

Ich poste JSON-Daten mit dem Modul Anfragen .

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 sollte diese Nachricht und die bereitgestellten Daten drucken, aber ich kann dieses einfache Problem nicht lösen. Bitte sagen Sie mir, wie ich gepostete Daten in Django 1.6?

50

Sie verwechseln hier formularkodierte und JSON-Daten. request.POST['foo'] Steht für formularkodierte Daten. Sie veröffentlichen RAW-JSON, daher sollten Sie request.body Verwenden.

received_json_data=json.loads(request.body)
93
Daniel Roseman

Für python3 müssen Sie zuerst body dekodieren:

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