django で JSON を受け取る
django で JSON を受け取る
先日こちらdjango で JsonResponse を使ってみるの記事で json の送信をやってみたので、今度は django で受け取る側をやってみたいと思います。
ルーティング
/django_project/config/urls.py
from django.contrib import admin
from django.urls import path
from django.urls import include
urlpatterns = [
path('admin/', admin.site.urls),
path('jsonapp/', include('jsonapp.urls')),
]
/django_project/jsonapp/urls.py
from django.urls import path
from . import views
app_name = 'jsonapp'
urlpatterns = [
path('receive_json/', views.receive_json, name='receive_json'),
]
JSONをポスト送信する
/django_project/jsonapp/request_json.py
import requests
import json
url = "http://127.0.0.1:81/jsonapp/receive_json/"
sess = requests.session()
print(sess.get(url))
csrftoken = sess.cookies['csrftoken']
# ヘッダ
headers = {'Content-type': 'application/json', "X-CSRFToken": csrftoken}
# 送信データ
prm = {"param1": "パラメータ1", "param2": "パラメータ2"}
# JSON変換
params = json.dumps(prm)
# POST送信
res = sess.post(url, data=params, headers=headers)
# 戻り値を表示
print("--戻り値----------------------------")
print(json.loads(res.text))
JSONを受け取る
/django_project/jsonapp/views.py
import json
from django.http.response import JsonResponse
from django.views.decorators.csrf import ensure_csrf_cookie
@ensure_csrf_cookie
def receive_json(request):
if request.method == 'GET':
return JsonResponse({})
# JSON文字列
datas = json.loads(request.body)
print("--受取り値--------------------------")
print(type(datas))
print(datas)
# requestには、param1,param2の変数がpostされたものとする
ret = {"data": "param1:" + datas["param1"] + ", param2:" + datas["param2"]}
# JSONに変換して戻す
return JsonResponse(ret)
実行結果
送信側の request_json.py を実行した結果は下の通りです。きちんとサーバーからレスポンスが返ってきているのが確認できました。
python3.6 request_json.py
--戻り値----------------------------
{'data': 'param1:パラメータ1, param2:パラメータ2'}
受信側で runserver 中のターミナルの結果は下の通りです。きちんとポストされたJSONを受け取っているのが確認できました。
"GET /jsonapp/receive_json/ HTTP/1.1" 200 2
--受取り値--------------------------
<class 'dict'>
{'param1': 'パラメータ1', 'param2': 'パラメータ2'}
ディスカッション
コメント一覧
まだ、コメントがありません