アプリケーション開発で、JSONの送受信は必要な場合が多いので、DjangoでJSONを試してみます。
###1.主な環境
カテゴリ | Right align |
---|---|
os | windows 10 home 64bit |
python | 3.6.5 |
django | 2.0.7 |
requests | 2.20.0 |
参考サイト
https://tokkan.net/python/django7.html
###2.アプリケーションを作成する
cmd.prompt
python manage.py startapp jsontest
###3.views.pyを編集する
簡単なパラメータを受信して、戻り値も同様にJSONを返すようにしています。
jsontest/views.py
from django.shortcuts import render
import json
from django.http.response import JsonResponse
from django.views.decorators.csrf import ensure_csrf_cookie
@ensure_csrf_cookie
def index(request):
if request.method == 'GET':
return JsonResponse({})
# JSON文字列
datas = json.loads(request.body)
# requestには、param1,param2の変数がpostされたものとする
ret = {"data": "param1:" + datas["param1"] + ", param2:" + datas["param2"]}
# JSONに変換して戻す
return JsonResponse(ret)
###4.urls.pyを作成する
jsontest/urls.py
from django.urls import path
from . import views
app_name = 'jsontest'
urlpatterns = [
path('', views.index, name='index'),
]
###5.tests.py
参考サイトに倣って、testからPOSTして確認する。
tests.py
from django.test import TestCase
import requests
import json
url = "http://127.0.0.1:8000/jsontest/"
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(json.loads(res.text))
###6.確認
####(1)サーバを起動しておいて
cmd.prompt
(venv) C:\data\python\myproject>manage.py runserver
####(2)testを実行する
別窓でコマンドプロンプトを実行します。
cmd.prompt
(venv) C:\data\python\myproject\jsontest>python tests.py
<Response [200]>
{'data': 'param1:パラメータ1, param2:パラメータ2'}
「Django REST Framework」でAPIを作るほうがよさそうですが、いったん基本的なところを押さえておきたかったのでこのやり方を試しました。