LoginSignup
22
23

More than 3 years have passed since last update.

(初心者向け)DjangoでシンプルなwebAPIを作ってみる

Last updated at Posted at 2019-12-31

概要

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

 今回はpipenvで作ったDjangoの環境でpythonを動かしてみるで作った環境で、Djangoの機能を使ったシンプルなwebAPIを作ります。

参考

環境

Mac OS 10.15
VSCode 1.39.2
pipenv 2018.11.26
Python 3.7.4
Django 2.2.6

webAPIの仕様

クーポンコードをリクエストされると、クーポンコードに紐づくクーポンの内容をHTTPでレスポンスする。

  • リクエストパラメータ:coupon_code
  • coupon_codeに0001を指定すると「1000円引きクーポン!」という文字列が返ってくる
  • coupon_codeに0002を指定すると「10%引きクーポン!」という文字列が返ってくる
  • コードを指定しない又は存在しないコードを入力すると「Error:Not found coupon code!」という文字列が返ってくる

手順

  • couponのdjangoアプリを作成
  • views.pyにレスポンス処理を実装
  • couponアプリ配下にurls.pyを作成
  • プロジェクト配下のurls.pyを編集
  • 動作確認

couponのdjangoアプリを作成

pipenv shell コマンドでpipenvの仮想環境に入り、manage.pyがあるディレクトリに移動します。
into-pipenv-directry-mask.png

couponという名前のdjangoアプリを作成します。
make-coupon-app.png

VSCodeでフォルダを開くとcouponアプリが出来ています。
check-making-app-vscode.png

views.pyにレスポンス処理を実装

下記のとおり、couponという関数を作り、クーポンの内容をハードコーディングしました。リクエスト変数(coupon_code)で送られてくるクーポンのコードに応じて、if文でクーポンの出しわけをします。レスポンスはDjangoのHttpResponseメソッドを使ってHttpで返します。

views.py
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def coupon(request):
    if 'coupon_code' in request.GET:
        coupon_code = request.GET['coupon_code']
        if coupon_code == '0001':
          result = '1000円引きクーポン!'
        elif coupon_code == '0002':
            result = '10%引きクーポン!'
        else:
            result = 'Error:Not found coupon code!'
        return HttpResponse(result)

couponアプリ配下にurls.pyを作成

次はパスの設定をします。まずは couponアプリの配下に urls.pyを新規作成します。

coupon/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.coupon, name='coupon'),
]

プロジェクト配下のurls.pyを編集

次はプロジェクト配下のurls.pyを編集します。urlpatternsの部分に path('coupon/',include('coupon.urls'))を追加しました。

ami_coupon_api/urls.py
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', include('hello.urls')),
    path('coupon/', include('coupon.urls'))
]

動作確認

変更を保存し、djangoのwebサーバを起動します。

$ python manage.py runserver

ブラウザで下記のURLにアクセス。
http://127.0.0.1:8000/coupon/?coupon_code=0001
正しいレスポンスが変える事を確認。
test-code-0001.png

他のパラメータを入力するパターンも確認

クーポンコード0002のクーポンをリクエスト
http://127.0.0.1:8000/coupon/?coupon_code=0002
test-code-0002.png

存在しないクーポンコードを指定した場合
http://127.0.0.1:8000/coupon/?coupon_code=0003
test-code-0003.png

以上で超シンプルなwebAPIの実装が出来ました。ここから下記のように改造し、実用に耐えうるwebAPIにしていきます。

  • Json形式でレスポンスする
  • ハードコーディングじゃなくてDBでクーポン情報を管理する
  • Rest full なAPIに改造する

次回は、学習のためにDjangoのテンプレート機能を使ってみます

22
23
2

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
22
23