1. HOME
  2. ブログ
  3. エンジニアになろう!
  4. 【最終回】Djangoで日記アプリを作ろう~総復習編~
【第10回】これまでの総復習と Django 便利パッケージの紹介

【最終回】Djangoで日記アプリを作ろう~総復習編~

Djangoで日記アプリを作ろう ~総復習編~

前回は Django の便利な認証系パッケージ allauth を使って、ユーザー登録やログインといった機能を実装しました。

ここまでの連載で日記の作成・閲覧・編集・削除に加えて、テンプレートに工夫を施す方法や Django における基本的なテストの実施方法、そして allauth を利用した認証機能の実装ができるようになりました。

今回の第9回で本連載は終わりとなります。

本記事ではこれまで学んだ内容を総復習します。

また、これから Django を使った開発を進めていく上で便利な Django の拡張パッケージを紹介します。

まずは、第1回から第9回までに学んだ内容を復習しましょう。

Django の基本的な思想

Django において最も基本的な思想、それがMVTという設計パターンです。

MVT は、Model・View・Template の略称です。

Model は、データアクセス層であり、データベースとのやりとりを支援します。

テンプレートはプレゼンテーション層、いわゆるユーザーインターフェースを定義します。

そして最後に View は、ビジネスロジック層です。

モデルと連携してデータを処理し、テンプレート(HTML)をレンダリングします。

URL ディスパッチャ

MVT に加えてもう一つ重要なのが、URL ディスパッチャです。

URL ディスパッチャはユーザーが URL にアクセスした際にその URL に対応した View を呼び出します。

これまでのアプリ開発でも urls.py に URL とそれに対応する View クラスを宣言してきました。

MVT と URL ディスパッチャ、これらが Django においてまず最初に抑えるべきポイントです。

使いこなすとコード量がグッと減る便利なViewクラス

前の章で View はビジネスロジック担当すると説明しました。

ビジネスロジックとは例えば日記データの作成や編集、削除のことです。

TemplateView と呼ばれる DjangoView クラスを利用して View を実装することも可能です。

しかし、データの作成や編集など、いわゆる CRUD(Create、Read、Update、Delete)作業に関しては、Django は便利な汎用クラスを用意してます。

本連載でも利用した、CreateViewListViewDetailViewUpdateViewDeleteView のことです。

これらのクラス継承した View クラスを使うことで、ほとんどコーディングすることなく CRUD 作業を実装できます。

Django テンプレート言語

Django テンプレート言語は、テンプレートファイル上で利用することのできる便利な機能です。

この言語を使いこなすことによって、HTML テンプレートファイルを効率的にそして簡素に作ることができます。

テンプレート言語における重要な概念が変数とタグです。

変数は {{ 変数名 }} といったように二重の中括弧で表現されます。

この変数に関して必ず理解しておかなければならないことは「変数を使えば View でコンテキストに埋め込んだデータを利用することができる」という点です。

例えば下記のように、日記の一覧表示を行う View を ListView を用いて実装したとしましょう。

この場合、diary_list.html というテンプレート内部で {{diary_list}} といった形で日記データのリストを利用することができます。

一方タグは {% タグ名 %} といったように%を使った記法になります。

タグを使う上でまず理解しておきたいのは大きく2つ。

2つのタグ

1つ目は for タグや if タグなどのロジックを実現するタグです。

for タグを使えば日記データのリストを下記のようにループ処理することが可能です。

これで日記の内容を一覧表示できますね。

もう1つが block タグを用いたテンプレートの継承です。

この block タグを利用することで親テンプレートの一部分を変えた子テンプレートを作成することが可能となり「ほとんど中身が同じだけど一部分だけが異なる複数のテンプレート」を効率よく作成できます。

Django における単体テスト

Django における単体テストは Python の標準テストモジュール unittest が基本となっており、unittest のサブクラスである django.test.TestCase を利用してテストコードを実装していきます。

本連載では下記のようなテストコードを実装しました。

setUpTestData メソッドを利用してテストで利用するテスト用データを作成し、そのデータをテストコードを実装したメソッド内部で参照できます。

allauth を用いた認証機能の実装

django-allauth は Django によるアプリ開発においてよく利用される認証機能を実現するパッケージです。

ユーザーの登録、ログイン、パスワードの再設定や変更など、会員制 web アプリを開発する上で必須となる機能を素早く実装することができます。

Django には django.contrib.auth という標準の認証パッケージが組み込まれていますが、ユーザー登録のビューがなかったりテンプレートが用意されていなかったりと物足りない部分があります。

実務上では特別な事情がない限り django-allauth を使って認証系機能を実装した方が低コストで良いでしょう。

Django の便利なパッケージ

ここまでは第1回から第9回の内容を総復習しました。

最後に Django を用いた web アプリケーション開発で便利なパッケージを紹介します。

Django REST Framework

Django REST Framework を利用すれば Django と連携した RESTful な Web API を作ることができます。

データベースにある表形式データを React などのフロントエンド側に渡す場合には、表形式データを JSON などのフォーマットに変換する必要があります。

この変換処理はシリアライズと呼ばれますが、Django REST Framework を用いればシリアライズ処理の実装が非常に簡単になります。

また Django REST Framework で作成した API は、その利用方法などを記載したドキュメントを自動生成することが可能です。

API の仕様は頻繁に変わるものですが、この自動生成機能があればドキュメントの更新漏れを防ぐことができます。

django-model-utils

django-model-utils は Django のモデルクラスの拡張を行います。

例えば StatusModel クラスは、モデルの状態を表すステータスフィールドを持たせることができます。

例えばメディア記事のデータに対して「作成中・レビュー前・投稿OK」といった状態を持たせたい場合に利用できます。

他にもモデルデータの論理削除を実施したい場合に使う SoftDeletableModel クラスなど、Django が標準で提供していないモデルクラスを多数用意しています。

モデルを設計した後に使えそうなクラスがないか一度ドキュメントを見てみると良いでしょう。

django-storages

Django とクラウドストレージサービスを連携するためのパッケージです。

Google Cloud の Google Storage や Amazon Web Service の S3 などのストレージサービスを Django アプリのデフォルトストレージとして利用できるようになります。

写真や動画などのアップロードを伴うアプリを開発する際にぜひ使いたいパッケージです。

まとめ

今回はこれまでの記事の総復習と便利な Django パッケージについて学びました。

今回のポイントは以下の通りです!

  1. Django の基本思想は MVT と URL ディスパッチャ
  2. 実務では CreateView などの便利な View クラスを利用しよう
  3. Django テンプレート言語の基本は変数とタグ
  4. Django における単体テストは Python の標準テストモジュール unittest がベースとなっている
  5. 認証機能を実装したいなら django-allauth が便利
  6. Django アプリと連携した Restful Web API を実装するなら Django REST Framework
  7. django-model-utils は Django のモデルクラスを拡張する
  8. Django とクラウドのストレージサービスを連携するならば django-storages を使う

これにて全9回となる Django の連載は終了となります!

9回では解説できないほど Django にはまだまだ奥深い所がありますので、本連載をベースとしてこれからも Django の世界を探求してください!

本連載を御覧頂き、ありがとうございました!

記事を書いた人

\ Djangoの開発もやります /
(株)ライトコードは、WEB・アプリ・ゲーム開発に強い「好きを仕事にするエンジニア集団」です。
システム開発依頼・お見積もりはこちらまでお願いします。
また、WEB・スマホ系エンジニアを積極採用中です!
※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。

こちらの記事もオススメ!


書いた人はこんな人

ライトコード社員ブログ
ライトコード社員ブログ
「好きなことを仕事にするエンジニア集団」の(株)ライトコードです!
ライトコードは、福岡本社、東京オフィスの2拠点で事業展開するIT企業です。
現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。
いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。

システム開発依頼・お見積もりは大歓迎!
また、WEBエンジニアとモバイルエンジニアも積極採用中です!

ご応募をお待ちしております!

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界を変える…! /

Androidエンジニア

\ みんなが使うアプリを創る /

iOSエンジニア