【Django3.0】開発環境構築から初期設定まで【Python3.8】
はじめに
Django で開発を行うにあたり、開発環境の構築からプロジェクトの初期設定など、ビジネスロジックの実装以外で基本的に一度やったらそれで終わりの作業をまとめました。
「えーと、 Django のプロジェクト作るには何をすればよかったんだっけ…」「あー!あの設定漏れてた!」と、僕がなることのまとめです。
新規に Django プロジェクトとアプリケーションを作成し、開発用の Web サーバを起動して Web ブラウザに Hello Django !!
と表示するところまでをまとめました。
動作環境
OS | Version |
---|---|
Windows 10 Pro | 1909 |
Application | Version |
---|---|
PowerShell | 5.1.18362.752 |
Language | Version |
---|---|
Python | 3.8.1 |
Package | Version |
---|---|
Django | 3.0.4 |
開発環境構築
まずは、必要なパッケージのインストールやプロジェクトの作成から。
Python 仮想環境作成
最初に Python の仮想環境を作成します。
python -m venv venv
インストール
次に仮想環境へ切り替えを行い、 Django をインストールします。
./venv/Scripts/activate pip install django
プロジェクト作成
インストールが完了したら、 Django のプロジェクトを作成します。
プロジェクトディレクトリを作成する場合
django-admin startproject [project_name]
カレントディレクトリにプロジェクトディレクトリが作成され、その中に Django アプリケーションの各構成ファイルが作成されます。
カレントディレクトリ = プロジェクトディレクトリの場合
django-admin startproject [project_name] .
カレントディレクトリに Django アプリケーションの各構成ファイルが作成されます。
アプリケーション作成
次に、プロジェクトルート直下にアプリケーションを作成します。
アプリケーション作成コマンドは、プロジェクトルートで実行します。
python manage.py startapp [application_name]
Django 初期設定
開発環境の構築が完了したら、プロジェクトの初期設定を行います。
プロジェクト
Django プロジェクトに関する設定は、プロジェクトディレクトリ内の設定ファイル (settings.py
) で行います。
設定ファイル (settings.py)
[project_root]/[project_name]/settings.py
言語 (LANGUAGE_CODE)
-- LANGUAGE_CODE = "en-us" ++ LANGUAGE_CODE = "ja"
タイムゾーン (TIME_ZONE)
-- TIME_ZONE = "UTC" ++ TIME_ZONE = "Asia/Tokyo"
データベース (DATABASES)
DATABASES = { "default": { -- "ENGINE": "django.db.backends.sqlite3", -- "NAME": os.path.join(BASE_DIR, "db.sqlite3"), ++ "ENGINE": "django.db.backends.oracle", ++ "NAME": "[host]:[port]/[db_name].[db_domain]", ++ "USER": "[user]", ++ "PASSWORD": "[password]", } }
Django では複数のデータベースを公式にサポートしており、ここでは例として Oracle Database への接続方法を記載しています。
テンプレート (TEMPLATES)
TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [], "APP_DIRS": True, "OPTIONS": { "context_processors": [ "django.template.context_processors.debug", "django.template.context_processors.request", "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", ], }, }, ]
APP_DIRS
を True
にすると、各アプリケーションディレクトリ直下の templates
ディレクトリ内にあるテンプレートを参照する。
APP_DIRS
のデフォルト値は True
なので、特に変更の必要はありません。
インストールアプリケーション (INSTALLED_APPS)
INSTALLED_APPS = [ ++ "[application_name].apps.[AppConfig]", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", ]
作成したアプリケーションの AppConfig
を INSTALLED_APPS
に追加し、アプリケーションを有効化します。
プロジェクトに含めるアプリケーションは INSTALLED_APPS
に追加する必要があり、逆に言えばここに追加しなければマイグレーション等の対象にはなりません。
プロジェクト作成時に既にいくつかのアプリケーションが追加されていますが、不要なものがあれば削除しても問題ありません。
ルーティング (urls.py)
URLconf
で URL パターンをビューにマッピングします。
プロジェクトルート直下の URLconf では、主に各アプリケーションの URLconf への参照設定を行います。
[project_root]/[project_name]/urls.py
urlpatterns = [ path("admin/", admin.site.urls), ++ path("[application_name]/", include("[application_name].urls")), ]
プロジェクトルートから作成したアプリケーションまでのルーティングを追加する。
アプリケーション
ここからはアプリケーションディレクトリ内の各構成ファイルについてです。
ビュー (views.py)
Django のビューは、関数ベースとクラスベース (汎用ビュー) の二種類存在しますが、ここでは関数ベースのビューを例示しています。
[project_root]/[application_name]/views.py
from django.shortcuts import render ++ def index(request): ++ context = {"framework": "Django"} ++ return render(request, "[application_name]/index.html", context)
ビューの役割は、データベースからのデータ取得やテンプレートのロード、レンダリングしたテンプレートの返却など多岐にわたります。
主なビジネスロジックはビューに実装することになります。
テンプレート (templates ディレクトリ)
[project_root]/[application_name]/templates/[application_name]/
プロジェクト設定ファイル (settings.py
) の TEMPLATES.APP_DIRS
を True
にした場合、アプリケーションディレクトリ直下の templates
ディレクトリ内が参照されます。
templates
ディレクトリ直下にテンプレートファイルを置かず、 [application_name]
ディレクトリを作成してから、その中にテンプレートファイルを配置します。
テンプレートの名前空間 - Django チュートリアルより要約
Django では名前がマッチした最初のテンプレートを使用するので、異なるアプリケーションの中に同じ名前のテンプレートがあった場合、それらを区別することができません。
templates
ディレクトリ直下に[application_name]
サブディレクトリを作り、その中にテンプレートファイルを配置することで、名前空間を作成することができます。
Django にはテンプレート内で使用できる独自のテンプレート言語が存在します。
ここで例示しているテンプレートは、ビューから渡されたコンテキスト変数の framework の値を展開し、レンダリングされます。
[project_root]/[application_name]/templates/[application_name]/index.html
++ <!DOCTYPE html> ++ <html lang="ja"> ++ <head> ++ <meta charset="utf-8"> ++ <title>Django Application</title> ++ </head> ++ <body> ++ Hello {{ framework }} !! ++ </body> ++ </html>
ルーティング (urls.py)
アプリケーション作成コマンドでは、アプリケーションディレクトリに URLconf (urls.py
) は作成されないため、自分で作る必要があります。
[project_root]/[application_name]/urls.py
++ from django.urls import path ++ from . import views ++ app_name = "[application_name]" ++ urlpatterns = [ ++ path('', views.index, name='index'), ++ ]
プロジェクトルートの URLconf から渡された URL パターン (URL からプロジェクトルートの URLconf で定義された URL パターンを除いた文字列) と、ビューをマッピングします。
モデル (models.py)
[project_root]/[application_name]/models.py
Django では、データベースのテーブルを Python のクラスで表現し、カラムをクラス変数として定義します。
テーブルとクラスが一対一で紐づき、これが一つのモデルとなります。
今回は Hello Django !!
と表示するだけなのでモデルは必要ありませんが、モデルの簡単な書き方だけ例示します。
from django.db import models class [class_name](models.Model): [column_name_1] = models.IntegerField(primary_key=True) [column_name_2] = models.CharField(max_length=[length]) [column_name_3] = models.DateField() [column_name_4] = models.ForeignKey( "[other_class_name]", models.DO_NOTHING, db_column="[other_column_name]" ) class Meta: managed = True db_table = "[table_name]"
既にデータベースにテーブルが存在する場合
Django には、既存のデータベースからモデルを自動生成するユーティリティが備わっています。
python manage.py inspectdb > [application_name]/models.py
inspectdb
コマンドを実行すると、プロジェクト設定ファイルの DATABASES
に設定されているデータベースのテーブルを読み込み、 Django モデルモジュールを標準出力に出力します。
上記の例では、 inspectdb
コマンドの出力結果をリダイレクトし、直接 models.py
に書き込んでいます。
マイグレーション
アプリケーションのモデルで定義した内容をデータベースに反映するために、マイグレーションを実行します。
Django では、マイグレーションの作成と適用それぞれにコマンドが用意されています。
マイグレーション作成
makemigrations コマンド
python manage.py makemigrations # アプリケーション単位でマイグレーションファイルを作成 python manage.py makemigrations [application_name]
makemigrations
コマンドを実行すると、 プロジェクト設定ファイルの INSTALLED_APPS
に設定されているアプリケーションのモデルを読み込み、各アプリケーションディレクトリの migrations
ディレクトリ内にマイグレーションファイルが作成されます。
マイグレーション実行
sqlmigrate コマンド
python manage.py sqlmigrate [application_name] [migration_name]
migrate
コマンドを実行する前に、 sqlmigrate
コマンドで実際にデータベースへ発行される SQL を確認することができます。
migrate コマンド
python manage.py migrate
migrate
コマンドを実行すると、 makemigrations
コマンドで作成されたマイグレーションの内容がデータベースに反映されます。
開発用サーバ
Django には、開発を迅速に行うために Python だけで書かれた軽量な Web サーバが付属しています。
サーバ起動
runserver コマンド
python manage.py runserver [port]
runserver
コマンドを実行すると、 Web サーバが起動します。
引数として、ポート番号を指定することもできます。
ポート番号のデフォルト値は 8000
です。
Web ブラウザで確認
runserver
コマンドで起動した Web サーバには、 http://localhost:[port]
でアクセスできます。
Django の開発用サーバは、デフォルトではコードを変更して保存する度に自動リロードされる設定になっています。
http://localhost:[port]/[application_name]/
にアクセスし、 Hello Django !!
と表示されれば、今回の Django アプリケーションは正常に動作しています。
おわりに
今回は、 Django プロジェクトを新規で立ち上げた際に行うことを中心にまとめました。
実際の開発では、今回取り上げなかったクラスベースの汎用ビューや、フォーム (forms.py
) 、管理サイト (Django Admin) など、他にも多くの Django の機能を使用することになると思います。
さらに、 SPA (Single Page Application) との組み合わせに Django REST framework 、ソーシャルログインを実装するために social-auth-app-django 、 WSGI サーバを立てるために Gunicorn など、 Django だけでなくサードパーティ製のパッケージも必要になることもあります。
覚えることが多くて大変と思いがちですが、一度覚えてしまえばアプリケーションの実装に集中できるので、やっぱりフレームワークは便利です。
というか、フレームワークを使用せずにすべてを自前で実装する方が絶対大変です…
それでは、皆様も良い Django ライフを!