LoginSignup
20
25

More than 3 years have passed since last update.

【Python/Django】JSON形式でレスポンスをするwebAPIを作成する

Last updated at Posted at 2020-01-01

概要

 この記事は初心者の自分がRESTfulなAPIとswiftでiPhone向けのクーポン配信サービスを開発した手順を順番に記事にしています。技術要素を1つずつ調べながら実装したため、とても遠回りな実装となっています。

 前回の Djangoのテンプレート機能を使ってみるで作ったコードを改造して、JSON形式でレスポンスするようにします。Django Rest Frameworkという便利なフレームワークが存在しますが、まずは仕組みを理解するのを目的に Django Rest Framework 等は使わずに書いてみます。

参考

Python Django入門 (6)

環境

Mac OS 10.15
VSCode 1.39.2
pipenv 2018.11.26
Python 3.7.4
Django 2.2.6

手順

  • views.pyを修正
  • 動作確認

views.pyを修正

データをjson形式に変換するためにjsonのモジュールをインポートします。
コードにimport jsonを追加します。

json.dumpsを使って、構造体をインプットにしてjson形式の文字列を作成するプログラムを追加します。構造体を作るコードは元のコードのparams = { }の部分をそのまま流用します。

json形式の文字列を作るコードを追加します。引数として構造体データのparamsを渡しています。
json_str = json.dumps(params, ensure_ascii=False, indent=2)

戻り値は、HttpResponseメソッドで単純にJson形式の文字列を返すだけです。
return HttpResponse(json_str)

修正後のviews.pyはこちらです。

views.py
from django.shortcuts import render
from django.http import HttpResponse
import json #追加した

def coupon(request):
    if 'coupon_code' in request.GET:
        coupon_code = request.GET['coupon_code']
        if coupon_code == '0001':
            benefit = '1000円引きクーポン!'
            deadline = '2019/10/31'
            message = ''
        elif coupon_code == '0002':
            benefit = '10%引きクーポン!'
            deadline = '2019/11/30'
            message = ''
        else:
            benefit = 'NA'
            deadline = 'NA'
            message = '利用可能なクーポンが見つかりません'

        params = {
            'coupon_code':coupon_code,
            'coupon_benefits':benefit,
            'coupon_deadline':deadline,
            'message':message,
        }
        #json形式の文字列を生成
        json_str = json.dumps(params, ensure_ascii=False, indent=2) 
        return HttpResponse(json_str)

動作確認

コードを保存してdjangoのサーバを起動します。

ターミナルからcurlコマンドでhttp://127.0.0.1:8000/coupon/?coupon_code=0001にアクセスすると、jsonで値が取得出来ています。
ami_coupon_api-test-curl-mask.png

次はブラウザでhttp://127.0.0.1:8000/coupon/?coupon_code=0001にアクセスすると、json形式のデータが表示されました。
ami_coupon_api-test-web.png

以上です。

次回はクーポン情報をレスポンスするアプリ側の実装をします(swift)

20
25
0

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
20
25