LoginSignup
46
39

More than 5 years have passed since last update.

Python + Django でJSONの送受信

Last updated at Posted at 2018-11-04

アプリケーション開発で、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を作るほうがよさそうですが、いったん基本的なところを押さえておきたかったのでこのやり方を試しました。

46
39
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
39