Help us understand the problem. What is going on with this article?

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

概要

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

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

参考

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を作ってみるで作成したコードに下記の修正をします。

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

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

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

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を作成します。クーポンの名前は仮でアミーゴクーポンとします。

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を修正

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

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
test-coupon-6a-0001.png

coupon_codeのリクエストを0002、0007と変えて試します。
test-coupon-6a-0002.png
test-coupon-6a-0007.png

以上です。

次回は、今後のコードの改造に備えてgitで管理出来るようにします

Ajyarimochi
SIerでアジャイル開発をやってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした