Jak odbierać dane json za pomocą żądania HTTP POST w Django 1.6?

Uczę się Django 1.6.
Chcę opublikować jakiś JSON używając HTTP POST request i używam Django do tego zadania do nauki.
Próbowałem użyć request.POST['data'], request.raw_post_data, request.body ale nikt nie pracuje dla mnie.
my views.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')

Zamieszczam dane JSON używając modułu requests .

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 powinien wydrukować tę wiadomość i opublikowane dane, ale nie jestem w stanie rozwiązać tego prostego problemu. proszę o informację jak odebrać wysłany dane w Django 1.6?

Author: Alok Singh Mahor, 2014-06-05

3 answers

Mylisz kodowanie formularzy i dane JSON. {[1] } jest dla danych zakodowanych w formie. Publikujesz raw JSON, więc powinieneś użyć request.body.

received_json_data=json.loads(request.body)
 121
Author: Daniel Roseman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-09 12:02:08

Dla python3 musisz najpierw rozszyfrować ciało:

received_json_data = json.loads(request.body.decode("utf-8"))
 74
Author: Thran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-29 14:51:32

Utwórz formularz z danymi jako polem typu CharField LUB TextField i zatwierdź przekazane dane. podobne pytanie

 -4
Author: Kracekumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-05 20:24:50