見出し画像

【タレントダッシュボード構築 #1】djangoのディレクトリ構成を理解する

#0では、PythonおよびWebアプリケーションフレームワーク(Django)を利用した「タレントダッシュボード」を作成することを宣言しました。
※動画キャプチャもありますので、ぜひご覧ください。

#1では、djangoのベーシックな構成をご紹介します。

なぜdjangoなのか

webフレームワークにはたくさん有名なものがありますね。
私は以下のような理由でdjangoを選びました。

・基本はPythonで完結する(CSSやHTMLの知識は多少必要)
・フルスタック、あれこれ組み合わせる必要がない
・ユーザ認証や管理画面機能が充実しているので、サイト構築により多くの労力を割くことができる

こちらのサイトによれば、InstagramやYouTube、Pinterest、Dropboxなど、錚々たるサービスがdjangoで構築されています。インスタが作れてタレントダッシュボードが作れないわけがない!という理論で十分説得力があるかもしれません。

公式チュートリアルDjango Girlsを参照すると、導入からサンプルサイトの構築までを一通り学べます。このエントリでは、公式チュートリアルを例にとって、djangoの構造全体をざっくり理解することを目指します。

環境の準備

Dockerを利用してLinuxマシンを用意することを想定しています。
これ以降は、Linuxマシン内での操作について記載します。

djangoを導入する

pipで入ります。うれしい!

$ pip install Django

インストールできているかを確認します。バージョンが表示されればOK。

$ python -m django --version

プロジェクトを作成する

次にプロジェクトを作っていきます。

$ django-admin startproject mysite

これで、mysite という名前のプロジェクトに紐づいた、基本のディレクトリやファイルが作成されます。

mysite/
   manage.py
   mysite/
       __init__.py
       settings.py
       urls.py
       wsgi.py

ここから中身を作っていくわけですが、ここは一旦割愛。公式チュートリアルに従って"polls"という名前のサンプルサイトの構築が完了すると、概ね以下のようなディレクトリ構成が出来上がります。

mysite/
   manage.py
   db.sqlite3
   mysite/
       __init__.py
       settings.py
       urls.py
       wsgi.py
   polls/
       __init__.py
       admin.py
       migrations/
           __init__.py
           0001_initial.py
       models.py
       static/
           polls/
               images/
                   background.gif
               style.css
       templates/
           polls/
               detail.html
               index.html
               results.html
       tests.py
       urls.py
       views.py

これは、mysiteプロジェクトの配下に、pollsアプリケーションが置かれている状態です。今回は、それぞれのディレクトリやファイルがどのような役割を担っているかをまとめます。

全体像

リクエストを受け付けてからレスポンスするまでの流れはこんな感じ。

画像2

・mysite/urls.py が polls/urls.py をincludeしている
・polls/urls.py は対応する views.py を探す
・views.py はページを構成する要素(HTML, CSS, データ, 画像など)を取得

シンプルですね。ひとつひとつ見ていきます。

mysite/manage.py

サーバの起動やマイグレーションを行うことができるプロセスです。

# ポート8000番でサーバを起動
$ python manage.py runserver 8000

# マイグレーションファイルを作る
$ python manage.py makemigrations

# マイグレーションする
$ python manage.py migrate

mysite/db.sqlite3

マイグレーションを行うと生成されるRDBの実体です。
デフォルトはSQLiteです。

マイグレーションとは、平たく言うと、プログラムからDBを自動生成することです。djangoにおいては、SQLを書いてDBを定義するのではなく、マイグレーションによってDBを定義します。

なお、djangoではデータベース操作もSQLで行わず、オブジェクト関係マッピング(ORM)と呼ばれる方法で行います。
データを取得してからそれを整形して出力するまでの流れをシームレスにPythonで書けることがメリット…だと私は解釈していますが、結構好き嫌いが分かれると思います。

mysite/mysite/settings.py

環境設定を行うための設定ファイルです。
プロジェクトを作ったけどブラウザでアクセスできない!という事象に遭遇した場合は、許可ホストの設定を確認してみてください。

# ALLOWED_HOSTS = []
ALLOWED_HOSTS = ['*']

mysite/mysite/urls.py

アクセス可能なURLを定義します。公式チュートリアルでは、pollsアプリケーションのurls.pyファイルをincludeする形にしています。

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

mysite/mysite/wsgi.py

Web Server Gateway Interfaceの略。ウィズギーと読むみたいです。WebサーバとWebアプリケーションの間のインタフェース定義です。

mysite/polls/admin.py

pollsアプリケーションの管理画面の定義です。
djangoの管理画面では、レコードの閲覧、更新、削除やユーザの管理を行うことができ、使い方によってはそれ自体をサービスとして提供できるほど機能が豊富です。

mysite/polls/migrations

makemigrationsコマンドを発行すると、DBの実体(db.sqlite3)とmodels.pyの差分を検出して、マイグレーションファイルがここに生成されます。
そして実際にマイグレーションを行う(migrateコマンドを発行する)と、今度はDBの実体(db.sqlite3)とマイグレーションファイルの差分を検出して、未反映のマイグレーションファイルの内容がdb.sqlite3へ反映されます。

mysite/polls/models.py

DBの定義を行うためのファイルです。
今回はさらっとこれだけの紹介ですが、かなり奥深いです。できることは豊富ですし、なにより結構クセがあります

mysite/polls/static

画像データやCSSファイルの置き場所です。

mysite/polls/templates

HTMLファイルの置き場所です。

mysite/polls/tests.py

単体テストの内容をクラスとして定義しておき、自動テストを行います。

mysite/polls/views.py

最終的にブラウザに表示する内容をこのファイルで定義します。
とはいえ、実際の見た目の定義はtemplatesディレクトリ配下のHTMLファイルやstaticディレクトリ配下のCSSファイルに大きく依存するので、記述としてそれほど長くなるわけではありません。

ざっと概要が掴めたのではないかと思います。
次回以降、実際に提供しているサービスの機能をご紹介します。

この記事が気に入ったらサポートをしてみませんか?