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の学習に役立つコンテンツ
英語版に加えて日本語版も提供されていたりしますが、英語版に比べて古かったりするので、出来るのなら英語版を読む方が良いでしょう。