【タレントダッシュボード構築 #1】djangoのディレクトリ構成を理解する
#0では、PythonおよびWebアプリケーションフレームワーク(Django)を利用した「タレントダッシュボード」を作成することを宣言しました。
※動画キャプチャもありますので、ぜひご覧ください。
#1では、djangoのベーシックな構成をご紹介します。
なぜdjangoなのか
webフレームワークにはたくさん有名なものがありますね。
私は以下のような理由でdjangoを選びました。
こちらのサイトによれば、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アプリケーションが置かれている状態です。今回は、それぞれのディレクトリやファイルがどのような役割を担っているかをまとめます。
全体像
リクエストを受け付けてからレスポンスするまでの流れはこんな感じ。
シンプルですね。ひとつひとつ見ていきます。
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ファイルに大きく依存するので、記述としてそれほど長くなるわけではありません。
ざっと概要が掴めたのではないかと思います。
次回以降、実際に提供しているサービスの機能をご紹介します。
この記事が気に入ったらサポートをしてみませんか?