Подтвердить что ты не робот

Как получить данные json, используя HTTP POST-запрос в Django 1.6?

Я изучаю Django 1.6.
Я хочу опубликовать JSON с помощью HTTP POST-запроса, и я использую Django для этой задачи для обучения.
Я пытался использовать request.POST['data'], request.raw_post_data, request.body, но никто не работает для меня.
my views.py -

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

Я публикую данные JSON, используя 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 должен печатать это сообщение и опубликованные данные, но я не могу решить эту простую проблему. скажите, пожалуйста, как собрать опубликованные данные в Django 1.6?

4b9b3361

Ответ 1

Здесь вы вводите в заблуждение данные в форме и JSON. request.POST['foo'] - для данных, закодированных в форме. Вы отправляете raw JSON, поэтому вы должны использовать request.body.

received_json_data=json.loads(request.body)

Ответ 2

Для python3 вы должны сначала декодировать тело:

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

Ответ 3

в вашем представлении перед if добавьте этот код:

raise KeyError(request.POST)

Он выгрузит все POST-вары, чтобы вы могли видеть, какая из них имеет строку JSON.

Ответ 4

Создайте форму с данными как поле типа CharField или TextField и подтвердите переданные данные. Подобный вопрос SO