Web制作

Djangoのインストール/設定/開発方法

文章目的

ここでは人気プログラミング言語PythonのWebフレームワークDjangoのインストール・設定・開発方法について説明していきます。
Webフレームワークの選択で悩んでる方は、別記事になりますが、DjangoとLaravelの比較記事が役立つかもしれませんので、ご参照下さい。

他WebフレームワークではなくDjangoを使う理由

Djangoの良い点は
– Pythonのフルスタック型Webフレームワークである事
– GoeDjangoといったGIS系アプリを作る時に強力なパッケージがある事
– デフォルトでついてくるテーブルに対応する管理画面の自動生成がまあまあ便利
という事が挙げられます。

逆に他Webフレームワークに対するデメリットとしては、現在Githubスターが1位になってるLaravelと比べると
– Laravelの方が開発作業負担を減らす機能が豊富で更新も早い
– Laravelの方が簡単&情報が充実してる
– Laravelの方がWebシステムの構築/運用も楽
といった事が挙げられるかと思います。

基本的には
– GISに強いニーズがあるのならDjangoも候補
– Pythonに兎に角全て寄せたいならDjango

– WebだけはPHP、オフラインはPython等と分けて運用できるのなら、純粋にWeb FWとしての機能を評価してLaravel
といった選択が、選択基準としては良いと思われます。

Dockerでインストールする場合

Docker自体のイントール・使い方についてはこちらの記事を参照。

DjangoのDocker用テンプレートとしては
https://github.com/hikarine3/docker-django-postgresql
django + gunicorn + nginx + postgresql + python
を使ってみましょう。

尚、DBとしてPostgreSQLを使うのは、Djangoの機能をフル活用しようとする場合、PostgreSQLの方が良い為です(MariaDBのサポートは最近加えられましたが元々PostgreSQLを主ターゲットにしてる)。

“Use this template”のボタンを押して、貴方用のPJの開始に使って下さい。

それからgit cloneし、docker環境を立ち上げてください。

git clone git@github.com:hikarine3/docker-django-postgresql.git;
cd docker-django-postgresql;
docker-compose up -d;

正常に立ち上がったら

http://localhost/

でページの表示が確認出来る筈です。

それから

docker exec -i -t `docker ps|grep django_app_by_1stclass|awk '{print $1}'` python3 manage.py makemigrations;

docker exec -i -t `docker ps|grep django_app_by_1stclass|awk '{print $1}'` python3 manage.py migrate;

と打つと、DjangoのDB側の設定が完了し

http://localhost/admin/

に正常にアクセスできるようになります。

そしたらその管理画面にログインできるユーザーを作りましょう。

docker exec -i -t `docker ps|grep django_app_by_1stclass|awk '{print $1}'` python3 manage.py createsuperuser;

これで管理画面にログイン出来るようになった筈です。

PostgreSQLへの接続は

docker exec -i -t `docker ps|grep postgres_by_1stclass|awk '{print $1}'`  psql  --user postgres

で接続する事が出来ます。

なお、dokcerのコマンドは長いので、よく使うコマンドにはaliasを作っておくと良いでしょう。

alias dpsql="docker exec -i -t \`docker ps|grep postgres_by_1stclass|awk '{print \$1}'\`  psql  --user postgres";
alias dweb="docker exec -i -t \`docker ps|grep django_app_by_1stclass|awk '{print \$1}'\`;"

そうしておくと
dpsql
でpostgresqlに接続でき
dweb コマンド
でwebサーバー上でそのコマンドを実行できるようになる

自分でLinux環境にインストールする場合

Pythonの用意

python 3系のインストール・設定方法
をご参照下さい


データベースの用意

PostgreSQLのインストール・設定方法
をご参照下さい。

Django3.0からはMariaDBも使える様になったので、MariaDBでも可能です。
その場合、MariaDBのインストール・設定方法をご参照下さい。


PJ用Gitレポジトリとローカルディレクトリの用意

https://github.com/
でプライベートレポジトリを作ってそのレポジトリ内に専用Python環境を作る

python -mvenv venv;
source venv/bin/activate;

以後、このPJ内のファイルを触る時には、毎回activateする。

Djangoのインストール

PJのディレクトリ内で

pip install django;
pip install django-environ;

と打ってdjangoをインストール

インストールされたdjangoのバージョン確認は

pip show django

で確認可能。

現在のPJにインストールされているPython関連のライブラリリストは

pip freeze;

で出力できる。

これを

pip freeze > requirements.txt;

と打って保存しておくと

pip install -r requirements.txt

で、その環境と同じライブラリと指定したバージョンをインストールする事が出来る。

Djangoのプロジェクトの開始

編集したいファイルを置きたい場所にcdして

PJ=djangopj;
django-admin startproject $PJ;

開発用に動かしてみるだけなら

cd $PJ;
python manage.py runserver;

もしもローカルサーバーで動かしているのなら
http://127.0.0.1:8000/
で作動が確認できる( リモートなら http://リモートサーバーのアドレス:8000/ )

PORT=80;
python manage.py runserver $PORT;

と$PORTを指定したら、別のポートで走らせる事が出来る。

データベースの変更

デフォルトではsqlliteを使って動いているので、それをPostgreSQL又はMariaDBに切り替える。

まずは、PJに使うデータベースとそれに対して権限をもつアプリから使うユーザーを追加する。
PJに使うデータベースの作成

CREATE DATABASE データベース名;

そのデータベースに必要なアクセス権限を持つWebアプリ用のユーザーを作成

CREATE USER xxx PASSWORD 'yyy';

権限を与える

GRANT ALL ON DATABASE データベース名 TO ユーザー名;
vi $PJ/settings.py

でDATABASESの値を自分の環境にあったものに変更する

PostgreSQLの場合

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': $DBNAME,
        'USER': $DBUSER,
        'PASSWORD': $DBUSERPASS,
        'HOST': $HOSTADDRESS,
        'PORT': $HOSTPORT
    }
}

MariaDBやMySQLの場合

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': $DBNAME,
        'USER': $DBUSER,
        'PASSWORD': $DBUSERPASS,
        'HOST': $HOSTADDRESS,
        'PORT': $HOSTPORT
    }
}

管理画面を使う

初期テーブルを作成

python manage.py migrate;

管理画面にログインする管理ユーザーを作成

python manage.py createsuperuser;

そしたら
http://localhost/admin/
にアクセスして、作ったユーザーでログイン出来る事を確認する。

その他の設定

vi $PJ/settings.py
で編集を考えるべきポイントリスト

TIME_ZONE = 'Asia/Tokyo'
LANGUAGE_CODE = 'ja'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '.$ドメイン名']

アプリの追加

ユーザー管理アプリを作りたい場合、アプリの名前をjobsとするとして、$PJディレクトリの中で

python manage.py startapp jobs;

$PJ/settings.pyの

INSTALLED_APPS = [
...
]

の末尾に作ったアプリ名を追加する

INSTALLED_APPS = [
...,
'jobs'
]

Djangoでよく使うコマンド

モデルの変更のデータベースへの反映

アプリを追加し、model.pyを変更したら

python manage.py makemigrations;

してから

python manage.py migrate;

migrateの取り消し

migrateの取り消しにはdjango_migrationsテーブルの中で戻したいバージョンが含まれる値を確認して

python manage.py migrate $APPNAME $MIGRATION_NAME;

そのappの全てを初期化したい場合には

python manage.py migrate $APPNME zero

と打つ

Djangoの学習に役立つコンテンツ

英語版に加えて日本語版も提供されていたりしますが、英語版に比べて古かったりするので、出来るのなら英語版を読む方が良いでしょう。

公式サイト
英語版
日本語版

Django Girls
英語版
日本語版