web-dev-qa-db-ja.com

POST 1.6でHTTP Djangoリクエストを使用してJSONデータを受信する方法

私は学んでいます Django 1.6。
いくつかの JSON をHTTPPOSTリクエストを使用して投稿し、このタスクのためにDjangoを使用しています学習。
request.POST['data']request.raw_post_datarequest.bodyを使用しようとしましたが、何も機能していません。
私の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')

requests モジュールを使用してJSONデータを投稿しています。

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はそのメッセージと投稿されたデータを出力するはずですが、この単純な問題を解決することはできません。 Django1.6で投稿データを収集する方法を教えてください。

50

ここでは、フォームでエンコードされたデータとJSONデータを混同しています。 request.POST['foo']は、フォームエンコードデータ用です。生のJSONを投稿しているので、request.bodyを使用する必要があります。

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

Python3の場合、最初にbodyをデコードする必要があります。

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