第1回 Djangoプロジェクトとアプリケーションの作成
これから何回かに分けてNginx + uWSGI + Djangoのwebアプリケーション環境を構築する方法を紹介していきます。
今回は、Pythonのvenv環境を作成してその中にDjangoをインストールし、Djangoプロジェクトとアプリケーションを作成するまでの内容です。
前提条件
CentOS 8にNginxとPython 3が既にインストールされている状態から説明します。CentOS 7でも同様に動作するはずです。まだの方は、当サイトのCentOS 8に最新のNginxをインストールとCentOS 8にPythonをインストールを見てください。
venvの作成とロード
適当なディレクトリを作成し、その中に入ってPythonのvenv環境を作成する。ここでは、demoディレクトリの中で.venvという名前のvenv環境を作成している。
その後、sourceコマンドでvenv環境をロードする。
$ mkdir demo
$ cd demo
$ python3 -m venv .venv
$ source .venv/bin/activate
(.venv)$
なお、venv環境から抜けたい場合はdeactivateコマンドを実行する。
pipの更新
Pythonのパッケージ管理ツールであるpipを使用してDjangoをインストールする前に、pipそのものやsetuptoolsが古いバージョンの場合があるため、併せてこれらも更新しておく。
(.venv)$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
pip (9.0.3)
setuptools (39.2.0)
You are using pip version 9.0.3, however version 20.2.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
(.venv)$ pip install -U pip
(.venv)$ pip install -U setuptools
(.venv)$ pip list
Package Version
---------- -------
pip 20.2.1
setuptools 49.2.1
Djangoのインストール
pipでDjangoをインストールする。とても簡単。
(.venv)$ pip install django
Djangoプロジェクトを作成
Djangoをインストールするとdjango-adminコマンドが使用可能になるので、現在のディレクトリ内にプロジェクトを作成する。プロジェクトを作成すると、指定した名前のコンフィグディレクトリが作成される。ここでは、demoという名前で作成している。
(.venv)$ django-admin startproject demo
(.venv)$ ls -la
合計 4
drwxr-xr-x. 4 hiyoko www-users 48 8月 9 01:51 .
drwx------. 4 hiyoko www-users 88 8月 9 01:49 ..
drwxr-xr-x. 5 hiyoko www-users 100 8月 9 01:49 .venv
drwxr-xr-x. 2 hiyoko www-users 89 8月 9 01:51 demo
-rwxr-xr-x. 1 hiyoko www-users 660 8月 9 01:51 manage.py
Djangoアプリケーションを作成
Djangoプロジェクトを作成すると、プロジェクトディレクトリ内にmanage.pyが作成される。これを使用して、Djangoアプリケーション (プロジェクト内のパッケージに相当) を作成する。ここでは、sampleという名前のアプリケーションを作成している。
(.venv)$ ./manage.py startpapp sample
(.venv)$ ls -la
合計 4
drwxr-xr-x. 5 hiyoko www-users 62 8月 9 01:51 .
drwx------. 4 hiyoko www-users 88 8月 9 01:49 ..
drwxr-xr-x. 5 hiyoko www-users 100 8月 9 01:49 .venv
drwxr-xr-x. 3 hiyoko www-users 108 8月 9 01:51 demo
-rwxr-xr-x. 1 hiyoko www-users 660 8月 9 01:51 manage.py
drwxr-xr-x. 3 hiyoko www-users 123 8月 9 01:51 sample
Djangoアプリケーションの初期設定
ここでは今後動作確認を行うにあたって最低限の初期設定を行う。
DBテーブルの作成
DjangoアプリケーションはデフォルトでSQLiteでのDBを使用するようになっており、簡単な動作確認程度の目的であれば別途DBを構築する必要はない。また、Djangoはユーザ管理とログイン機能を提供しており、デフォルトで管理ページを持つ。このため、初期設定としてDBにユーザ管理等用のテーブルを作成する必要がある。といってもDBに対して手動でSQL文を打つわけではなく、ORM (ORマッパー) 機能によりPythonで書かれたクラス定義がDBテーブルに変換されて作成される。
Djangoの初期設定としてDBテーブルを作成するには、manage.py
コマンドでクラス定義からテーブルデータへのマイグレーションを実行する。
(.venv)$ ./manage.py makemigrations
No changes detected
(.venv)$ $ ./manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
スーパーユーザの作成
Djangoの管理画面へログインするために、スーパーユーザを作成しておく。
(.venv)$ ./manage.py createsuperuser
Username (leave blank to use 'hiyoko'):
Email address:
Password:
Password (again):
Superuser created successfully.
接続元ホストの許可設定
Djangoはデフォルトでローカルホストからのアクセスのみを許容する。Djangoプロジェクトと同じローカルホスト内でブラウザを立ち上げで確認する場合は特に不要だが、他のホストからネットワーク越しにアクセスする場合はsettings.pyのALLOWED_HOSTS設定を変更して許可する。
(.venv)$ vi demo/settings.py
settings.pyの内容
ALLOWED_HOSTS = ['*']
コメント