Djangoのテンプレート機能を使ってみる

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

　Djangoのテンプレート機能は本来不要ですが、学習のために試す事にします。前回の[（初心者向け）DjangoでシンプルなwebAPIを作ってみる](https://qiita.com/Ajyarimochi/items/ce072d91a2c00cd0d861)で作ったコードをベースにします。

### 参考
Python Django 超入門　掌田津耶乃 著　秀和システム


### 環境
Mac OS 10.15
VSCode 1.39.2
pipenv 2018.11.26
Python 3.7.4
Django 2.2.6

### webAPIの仕様
クーポンコードをURLでリクエストすると、クーポンコードに紐づくクーポンの内容をテンプレートで表示する

* リクエストパラメータ：coupon_code
* coupon_codeに0001を指定すると「1000円引きクーポン！」という文字列が返ってくる
* coupon_codeに0002を指定すると「10%引きクーポン！」という文字列が返ってくる
* コードを指定しない又は存在しないコードを入力すると「利用できるクーポンがありません」という文字列が返ってくる。


# 手順
[（初心者向け）DjangoでシンプルなwebAPIを作ってみる](https://qiita.com/Ajyarimochi/items/ce072d91a2c00cd0d861)で作成したコードに下記の修正をします。

* Djangoの機能を使うためにアプリーケーションを登録する
* テンプレートのhtmlファイルを作る
* render関数でテンプレートに値を送れるようにviews.pyを修正を実装
* 動作確認

### Djangoの機能を使うためにアプリケーションを登録する

プロジェクト名のフォルダ配下のsettings.py のINSTALLED_APPS に アプリ名（coupon）を追加するだけです。

```python:settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'coupon', #追加した行
]
```

### テンプレートのhtmlファイルを作る

`coupon`ディレクトリ配下に`templates`ディレクトリを作り、更に`templates`ディレクトリ配下に`coupon`ディレクトリを作ります。
（djangoのファイル参照の仕様上、複数のindex.htmlファイルを作成した時を考慮してディレクトリを二重にする事が推奨されている。）

作成したcouponディレクトリ内に、index.htmlを作成します。クーポンの名前は仮でアミーゴクーポンとします。

```html:index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>アミーゴクーポン</title>
</head>
<body>
    <h1>アミーゴクーポン</h1>
    <p>
        <ul>
            <li>クーポンコード：{{coupon_code}}</li>
            <li>特典：{{coupon_benefits}}</li>
            <li>有効期限：{{coupon_deadline}}</li>
            <li>{{message}}</li>
        </ul>
    </p>
</body>
</html>
```


### render関数でテンプレートに値を送れるようにviews.pyを修正

下記のとおり修正します。

```python: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':
            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,
        }
        return render(request, 'coupon/index.html', params)
```

### 動作確認

変更を保存したらdjangoのwebサーバを起動し、ブラウザで下記のURLにアクセスします。
`http://127.0.0.1:8000/coupon/?coupon_code=0001`
<img width="747" alt="test-coupon-6a-0001.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/1950516e-6e5b-7ef1-2f4f-d4d7bc0f2a7a.png">


coupon_codeのリクエストを0002、0007と変えて試します。
<img width="745" alt="test-coupon-6a-0002.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/1c7998b9-c0c0-cdc4-842a-52c1efb15c58.png">
<img width="747" alt="test-coupon-6a-0007.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/8e2cb589-a96f-0fa4-48ac-69a975fa90cf.png">


以上です。

次回は、[今後のコードの改造に備えてgitで管理出来るようにします](https://qiita.com/Ajyarimochi/items/1ed8d7077d4d8ce8fffa)