Python WEBサービス

【DRF】venv仮想環境を用いて、DRFシステムで書籍管理システムを作成する(2)Djangoアプリケーションの作成

DRFを利用して書籍管理システムを作成するの2回目です。前回はDjangoが稼働するところまでをまとめましたが、今回はアプリケーションを作成するところまでを追っていきたいと思います。
試行錯誤しながらなので、なかなか進まないのが悩みどころ(苦笑)

3.「アプリケーション」の作成

プロジェクト以下に、アプリケーションを作成します。
今回は書籍管理APIを構築するので、名前は book とします。

アプリケーションを作成するコマンドは、 django/apps ディレクトリ内で行います。

出来上がったファイルは以下のようになります。

3-1.管理ユーザー作成

アプリの管理ユーザを作成します。
コマンドの実行は manage.py のある django ディレクトリで行います。

ユーザー名、メールアドレス、パスワードを入力します。
パスワードは最低8文字が必要です。
また入力時にパスワードは表示されない(見えない)ので、間違えずに入力して下さい。コピペ推奨。

3-2.アプリケーションを使えるように設定

アプリケーションを使えるようにするには、プロジェクト設定に「アプリケーション」を追加する必要があります。

API を構築するにはDjango REST Frameworkを使用するので、同時に追加します。
job_board/settings.py ファイルにある INSTALLED_APPS に追加します。

apps/settings.py

3-3.Pagination追加

ページネーションを追加するために下記の設定をsettings.pyに追加します。
以下の設定で4データごとにページ送りするようになります。

apps/settings.py

3-4.apps.pyファイルの確認

apps/book/apps.pyname フィールドが正しく設定されていることを確認します。
次のように nameapps.book に変更します。

apps/book/apps.py

4.モデルの作成

4-1.モデルファイルの作成

アプリ以下のディレクトリにモデルファイルを作成します。(jobs/models.py)
モデルファイルは、テーブル設計を行うファイルで、カラム名やカラムの形式などを書き込んでいきます。

モデルの書き方については、下記記事を参考にしてください。

apps/book/models.py

あまり深く考えずにテーブルを作成してしまい、少し後悔していますが、あとで修正して再マイグレーションすればいいやと思い、そのまま進めることとします。
とはいいながら、一応、著者は複数登録できるように、中間テーブルを使用する形にするなどしている設定です。後々細かい技を駆使する予定。

4-2.データベース構築

モデルファイルが作成できたらデータベースの構築が必要になりますので、下記コマンド(makemigrations)を実行します。

続けて下記コマンド(migrate)を実行します。

マイグレーションした結果のファイルができが上がっています。
drf3/django/apps/book/migrations ディレクトリ内を確認。

「0001_initial.py」が、マイグレーション実行時に作成されるファイルです。
テーブル構造を変更するなどしてマイグレーションを実行するたびに、連番のファイルが次々と出来上がる仕組みとなっています。

5.URL追加

5-1.プロジェクト用ルーティングを作成

ルーティングの設定を行います。
ルーティングとは、リクエストに応じて、Djangoプロジェクト内でどのような処理経路を辿らせるかを指定するものです。
簡単に言うとネットワーク上で行われる道案内です。

プロジェクト用のルーティング用ファイル(django/apps/urls.py)に、アプリケーション用のルーティングを指定します。
apps/api へのアクセスルートを設定するため、include には appsからのパスを「.」で接続して設定します。

apps/urls.py

5-2.アプリケーション用ルーティングを作成

次に、アプリケーションのルーティングを作成します。

今回はDRFなので、APIを作成するためAPI専用のディレクトリを作成し、管理しやすくします。
book ディレクトリの下に api フォルダを作成し、その中に urls.py ファイルを作成します。

book/api/urls.py

上記設定で、書籍と出版社へのルーティングが出来上がります。

5-3.__init__.py ファイルの作成

apiディレクトリ以下に必要とのことで __init__.py ファイルを作成します。
内容はなく、空ファイルで良いとのことです。

ここでは内容は空のファイルを作成するだけでOKです。

6.Serializer (シリアライザー) 追加

Serializer とは?

Serializer とは、クエリセットやモデルインスタンスのような複雑なデータを Json形式のフォーマットに変換することを役割としています。

先ほど作成した api ディレクトリ以下に serializers.py ファイルを作成します。
serializers の ModelSerializer クラスを継承することにより、簡単に書くことができます。

book/api/serializers.py

詳細な解説

PublisherSerializer, GenreSerializer, AuthorSerializer:
これらは非常にシンプルで、ModelSerializer を使用し、全てのフィールドをシリアライズします。
BookSerializer:
publisher フィールドに対して PublisherSerializer を使用し、genres フィールドに対して GenreSerializer を使用しています。このようにすることで、関連するモデルのデータも含めてシリアライズできます。
read_only=True を指定することで、関連するオブジェクトが読み取り専用になります。これにより、書き込み操作時にこれらのフィールドを無視します。
BookAuthorSerializer:
book フィールドに対して BookSerializer を使用し、author フィールドに対して AuthorSerializer を使用しています。これにより、BookAuthor モデルに関連する Book と Author のデータもシリアライズできます。

このように定義することで、各モデルとその関連データをシリアライズしやすくなります。シリアライザを適切に定義することで、API の使いやすさが向上し、フロントエンドや他のサービスと円滑にデータをやり取りできるようになります。

7.Permissions追加

Django REST Framework が提供するパーミッションシステムを使用し、API を安全にします。

主な機能

・認証されたユーザーのみに API へのアクセスを許可する
・許可されたユーザーのみに書き込み権限を与える

permissions.py ファイルを作成します。

jobs/api/permissions.py

8.Views追加

Viewsと聞くと、私が長年使用してきたCakePHPやZendFrameworkでおける、フロントサイドのHTMLを作成するファイルだと思えそうですが、Djangoでは、いわゆるControllerの役割を担うファイルで、がっつりバックエンドの処理を書いていくファイルとなります。

そして Django REST Framework では GenericAPIView の中に一般的に必要な開発のコードをすでに用意してくれています。
それを継承することで、簡単に開発をすることができます。

API の CRUD 操作はどの場合においても必要なため、すでに用意されています。
CRUD とは今更書かなくてもわかると思いますが、以下の機能の総称となります。

  • Create(生成)
  • Read(読み取り)
  • Update(更新)
  • Delete(削除)

8-1.views.py ファイルの作成

では views.py ファイルを作成します。

apps/book/api/views.py

駆け足できましたが、今回はここまで。
ひとまずこれでDjangoの設定は終了しました。

次回は API 関連に取り掛かります。

-Python, WEBサービス
-, , , ,