web-dev-qa-db-ja.com

POSTのDjangoから `request.body`を解析しようとしています

何らかの理由で、Djangoがrequest.bodyコンテンツを正しく処理しない理由を理解できません。

JSON形式で送信されており、Dev ToolsのNetworkタブを見ると、これがリクエストペイロードとして示されています。

{creator: "creatorname", content: "postcontent", date: "04/21/2015"}

これがまさにAPIに送信される方法です。

Djangoには、このリクエストをパラメーターとして受け入れるビューがあり、テスト目的のために、request.body["content"]をコンソールに出力する必要があります。

もちろん、何も印刷されていませんが、request.bodyを印刷すると次のようになります。

b'{"creator":"creatorname","content":"postcontent","date":"04/21/2015"}'

だから、私はdoが送信されていることを知っています。

私もjson = json.loads(request.body)を使用してみましたが、役に立ちませんでした。変数を設定した後にjsonを印刷しても、何も返されません。

45
Zach

Python 3.0からPython 3.5.xでは、json.loads()はユニコード文字列のみを受け入れるため、request.body(バイト文字列)をデコードする必要がありますjson.loads()に渡します。

body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
content = body['content']

Python 3.6では、 json.loads()はバイトまたはバイト配列を受け入れます 。したがって、request.bodyをデコードする必要はありません(UTF-8、UTF-16、またはUTF-32でエンコードされていると仮定)。

123
Alasdair