今更ですが、最近Pythonのフレームワーク Django でアプリケーション開発をしてみました。CentOS7+Apache2.4の環境で、Djangoのアプリを生成したので備忘録的に基本構成を記しておこうと思います。
今回は、Python3, Djangoのインストールから表示までです。
目次
Python ・ Djangoのインストール
自前の環境ではpython2.7がシステムでインストールされており、利用中で削除できなかったのでpython3系を追加でインストールしました。
Python3インストール
まず、インストール前のバージョン確認
1 2 |
[root@hoge test]# python --version Python 2.7.5 |
追加でpython3をインストールします。Python3系は、yumのデフォルトのリポジトリに入っておらず、IUS Community Projectのリポジトリを追加する必要があります。
(IUSとは、Python等の最新バージョンの RPM packages を配布しているコミュニティです)
1 2 |
[root@hoge test]# yum install -y https://centos7.iuscommunity.org/ius-release.rpm [root@hoge test]# yum install -y python36u python36u-pip python36u-devel |
インストール後のバージョン確認
1 2 3 4 |
[root@hoge test]# python3.6 --version Python 3.6.8 [root@hoge test]# pip3.6 --version pip 9.0.1 from /usr/lib/python3.6/site-packages (python 3.6) |
Djangoのインストール
新しく入れた3系のpythonでdjangoをインストールします。
1 |
[root@hoge test]# pip3.6 install django |
これで、Python3, Djangoのインストールはとりあえず完了です。
WSGIインストール
ApacheでPythonを動かすために、mod_wsgiをインストールします。
1 2 3 |
[root@hoge test]# pip3.6 install mod_wsgi cd /usr/local/lib64/python3.6/site-packages mv mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so /usr/local/apache2/modules/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so |
デフォルトのディレクトリでも良いのですが、一応任意の場所に移動しておきます。
Apacheのhttpd.confなどで
1 2 3 |
LoadModule wsgi_module modules/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so WSGIPythonHome /usr/ WSGIPythonPath [任意ディレクトリ]/app_name:[任意ディレクトリ]/app_name/app_name |
WSGIPythonPathは、インクルードパスなのでコロン繋ぎで複数指定できる。
ただし、上記の設定はvhost内には書けない模様。
Djangoでのプロジェクト生成
Django はまず、「プロジェクト」という器を用意し、その中に「アプリケーション」を複数作れるような仕組みになっています。
Djangoには django-admin と manage.py の2種類の管理コマンドユーティリティがあります。これらを使ってプロジェクト・アプリケーションを生成します。
Djangoでのプロジェクト生成(通常)
1 |
django-admin startproject [project_name] |
上記のコマンドだけでプロジェクトが生成されますので非常に簡単にプロジェクトが生成できますが、このまま生成してしまうと、プロジェクト内にプロジェクト名のファイルが新たに作られてしまいます。
それでもよいのですが、その中にプロジェクト固有の設定ファイル類が作成されてしまい、名称の重なりによる若干の分かりづらさがあります。
そこで、プロジェクト用のディレクトリを生成してから、第一パラメータに内部のディレクトリ名を指定して、第二パラメータでプロジェクトの作成済みディレクトリを指定し、プロジェクトを生成することが出来ます。
Djangoでのプロジェクト生成(内部ディレクトリ名指定)
1 |
django-admin startproject [dir_name] [project_dir] |
生成されたプロジェクト内のファイル構成は以下のようになりました。
1 2 3 4 5 6 7 |
. ├── config (ここがdir_nameで指定された) │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py |
プロジェクト内に移動して、アプリケーションを生成する。
1 2 |
cd [project_name] python3 manage.py startapp [app_name] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
. ├── app_name (アプリケーション固有のファイル) │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py ├── config (プロジェクト固有のファイル) │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ └── settings.cpython-36.pyc │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py |
Djangoプロジェクト生成時に出来るファイル
manage.py | コマンドラインからさまざまな操作を行うためのファイル |
---|---|
settings.py | プロジェクト固有の設定用ファイル |
urls.py | URLパターンとビューのマッチング情報を記載するファイル |
wsgi.py | WSGIインターフェースに対応したアプリケーションサーバからDjangoプロジェクトを起動する為のファイル |
Djangoアプリケーション生成時に出来るファイル
admin.py | 管理サイトに関する記述をする |
---|---|
apps.py | アプリケーションを識別するための設定ファイル |
models.py | モデルの定義やビジネスロジックを記載するファイル |
tests.py | テストを記述するファイル |
views.py | ビューを記述するファイル |
インストール直後のdjangoは、デフォルトでDBはsqlite3を選択中となっています。
sqlite3の指定バージョン(今回は3.8.0以上)が入っていないとエラーとなります。
とりあえずdjangoの表示確認までしたい場合は、setting.pyの75行目付近の以下設定を一時的にコメントアウトすると表示までは確認出来るようになります。
setting.py
1 2 3 4 5 6 |
# DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } # } |
1 2 3 |
ALLOWED_HOSTS = ['*'] LANGUAGE_CODE = 'ja' TIME_ZONE = 'Asia/Tokyo' |
ブラウザからの表示
ちょっと細かな設定で記載が漏れているかもしれませんが、おおよそ上記の流れで設定してApacheを再起動させたらブラウザから表示確認ができました。
次回からはもう少し細かな設定などを記載しようと思います。