Django (ジャンゴ) はベルギー男性の名前です。何かの略語ではありません。
ギターの天才「ジャン・バティスト・ラインハルト」の愛称「ジャンゴ」から採られたそうです。
センターで演奏しているおっさんがその人です。43 歳の時に病気でこの世を去っています。
Django のインストールに際し、Python3 と Python2 を共存させます。
Python3 をインストールした後なら Python2 が不要になりそうですが、yum は Python2 で記述されているため、Python2 は削除できないのです。
※1 Python2 とそれに対応する Django 1.11 は開発が終了することが分かっているので、上記の組み合わせをインストールします。
種類 バージョン 備考 OS CentOS 7.5 本稿記述時の最新版 IP アドレス 192.168.1.100 公開用に使用する自分の IP アドレス 言語 Python 3.6.5 (※1) yum でインストールできる最新版
pip は 10.0.1 を使用フレームワーク Django 2.0.7 (※1) pip でインストールできる最新版 Django プロジェクトの設置場所 /var/www/html/ Django のテスト用 Web サーバーを起動するだけならどこに設置しても良いが、
本番稼働を考慮して Apache の (CentOS の) デフォルトディレクトリに設置する。
(/var/www/html/ に設置ユーザーの書き込み権限があること)
Django プロジェクト名称 mysite Django のチュートリアルに準拠 Django プロジェクト用静的コンテンツ設置場所 mysite/static/ 今回は作成するだけ。中にファイルは設置しない
URL は http://サーバ名:ポート番号/static/Django プロジェクト用テンプレート設置場所 mysite/templates/ 今回は作成するだけ。中にファイルは設置しない
フルパスは /var/www/html/mysite/template/static/Django アプリケーション名称 hello URL は http://サーバ名:ポート番号/hello/ Web サーバ Apache/2.4.6 Django のローカルテストには Django の Web サーバ機能を使用する。 Web サーバ用 Python 実行系 mod_wsgi 4.6.4 -
1-1. Python3 ダウンロード用リポジトリ情報をインストール
IUS の Web ページ の Getting Started からリポジトリ情報をインストール
※2 なぜか epel には python3 がない
※3 ius-release.rpm をダウンロードしてから rpm コマンドでインストールすると、あとで整合性が取れなくなるので yum で入れる
ius-release IUS compiles separate packages for RHEL and CentOS. Use one of the following links to get the correct release package. ・https://rhel6.iuscommunity.org/ius-release.rpm ・https://rhel7.iuscommunity.org/ius-release.rpm ・https://centos6.iuscommunity.org/ius-release.rpm ・https://centos7.iuscommunity.org/ius-release.rpm <- これ
$ su
# yum -y install https://centos7.iuscommunity.org/ius-release.rpm
2-1. yum で python 3.6 と pip 3.6 をインストール
# yum -y install python36u python36u-pip python36u-devel2-2. pip をアップグレード (しなくても Django は動く)
# python3.6 --version
# pip3.6 --version
Python 3.6.5
pip 9.0.1 from /usr/lib/python3.6/site-packages/pip (python 3.6)
pip をアップグレードすると pip にパスが通るのでコマンド名に pip が使えるようになる
↑ そうならない場合もあるらしい。(理由は不明)
# pip3.6 install --upgrade pip
# pip3.6 --version
pip 10.0.1 from /usr/lib/python3.6/site-packages/pip (python 3.6)
3-1. pip で Django をインストール
# pip3.6 install Django3-2. インストールされた Django のバージョンを確認
または
# pip3.6 install Django==2.0.7 # ← バージョンを指定してインストールする場合。
# pip3.6 install Django -U # ← インストール済みの Django を最新にバージョンアップする場合。
# pip3.6 show Django
# python3.6 -m django --version
Name: Django Version: 2.0.7 Summary: A high-level Python Web framework that encourages rapid development and clean, pragmatic design. Home-page: https://www.djangoproject.com/ Author: Django Software Foundation Author-email: foundation@djangoproject.com License: BSD Location: /usr/lib/python3.6/site-packages Requires: pytz Required-by:
# exit
2.0.7
4-1. プロジェクトを作成する
4-1-1. プロジェクトを設置するディレクトリへ移動4-2. Django の Web サーバ機能を起動
$ cd /var/www/html/4-1-2. ディレクトリ mysite が存在しないことを確認
/var/www/html/$ ls | grep mysite | wc -l4-1-3. プロジェクト mysite を作成
0
/var/www/html/$ django-admin startproject mysite
テンプレート用ディレクトリを作成
/var/www/html/$ mkdir ./mysite/templates
静的コンテンツ用ディレクトリを作成
/var/www/html/$ mkdir ./mysite/static
admin 用 css ディレクトリへのリンクを作成
/var/www/html/$ pip3.6 show Django | grep Location
/var/www/html/$ ln -s /usr/lib/python3.6/site-packages/django/contrib/admin/static/admin/ ./mysite/static/admin
Location: /usr/lib/python3.6/site-packages
作成されたファイルを確認
/var/www/html/$ LANG=c tree ./mysite
./mysite |-- manage.py |-- mysite | |-- __init__.py | |-- settings.py | |-- urls.py | `-- wsgi.py |-- static | `-- admin -> /usr/lib/python3.6/site-packages/django/contrib/admin/static/admin `-- templates 4 directories, 5 files
4-2-1. プロジェクト mysite からテスト用 Web サーバーを起動
/var/www/html/$ cd ./mysite/4-2-2. ブラウザで mysite を表示させる
/var/www/html/mysite/$ python3.6 manage.py runserver
停止するときは ^C を入力する。
※4「ここから下は~」の 1 行は手でタイプしています。
何か注意されているけど、動作チェックなので無視する。
Performing system checks... System check identified no issues (0 silenced). You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. July 03, 2018 - 09:45:00 Django version 2.0.7, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. -----↓ここから下はアクセスされるとログが表示されます(※4)↓-----
CentOS7 の GUI からブラウザを起動し、http://127.0.0.1:8000/ をアクセスする。4-2-3. 表示できたので、テスト用 Web サーバーを終了する
※5 他クライアントのブラウザからアクセスするには設定 (後述: 6-6 を参照) が必要なので、ここでは 127.0.0.1 (localhost) をアクセスします。
こんな表示になれば OK。
テキストブラウザだとこんな感じ
/var/www/html/mysite/$ lynx http://127.0.0.1:8000/
Django: the Web framework for perfectionists with deadlines. django View release notes for Django 2.0 The install worked successfully! Congratulations! You are seeing this page because DEBUG=True is in your settings file and you have not configured any URLs. Django Documentation Topics, references, & how-to's Tutorial: A Polling App Get started with Django Django Community Connect, get help, or contribute コマンド: [矢印キー] 移動、[?] ヘルプ、[q] 終了、[←] 戻る 矢印キー: [↑][↓]で移動 [→]でリンクを辿る [←]で一つ戻る [H]ヘルプ[o]設定[p]印刷[g]移動[m]メイン画面[q]終了 /=検索 [BackSpace]=履歴
^C を入力する
Performing system checks... System check identified no issues (0 silenced). You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. July 03, 2018 - 09:45:00 Django version 2.0.7, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. -----↓ここから下はアクセスされるとログが表示されます↓----- [03/Jul/2018 10:03:27] "GET / HTTP/1.0" 200 16348 [03/Jul/2018 10:03:55] "GET / HTTP/1.0" 200 16348 ^C
5-1. アプリケーションのスケルトンを作成
/var/www/html/mysite/$ python3.6 manage.py startapp hello5-2. アプリケーションの view モデルを編集
作成されたファイルを確認
/var/www/html/mysite/$ LANG=c tree ../mysite
※6 runserver を実行したときに自動作成されたファイル群
../mysite |-- db.sqlite3 --- ※6 |-- hello --- ※7 | |-- __init__.py | |-- admin.py | |-- apps.py | |-- migrations | | `-- __init__.py | |-- models.py | |-- tests.py | `-- views.py |-- manage.py |-- mysite | |-- __init__.py | |-- __pycache__ --- ※6 | | |-- __init__.cpython-36.pyc | | |-- settings.cpython-36.pyc | | |-- urls.cpython-36.pyc | | `-- wsgi.cpython-36.pyc | |-- settings.py | |-- urls.py | `-- wsgi.py |-- static | `-- admin -> /usr/lib/python3.6/site-packages/django/contrib/admin/static/admin `-- templates 7 directories, 17 files
※7 startapp hello によって自動作成されたファイル群
5-2-1. view を編集する5-3. 作成したアプリケーションの動作を確認
/var/www/html/mysite/$ vim ./hello/views.py5-2-2. view へのディスパッチャを作成する (新規作成)
※8 この「from ~」の 1 行はコメントアウトしなくても動作するけど、今は不要。
#from django.shortcuts import render #--- ※8 # Create your views here. from django.http import HttpResponse def index(request): return HttpResponse(u"Hello Django.\n") #--- ※9
※9 Hello Django. の部分はマルチバイト (日本語) も書けます。
/var/www/html/mysite/$ vim ./hello/urls.py5-2-3. メインのディスパッチャに hello へのディスパッチャ path('hello/', ~) を追加する。
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ]
/var/www/html/mysite/$ vim ./mysite/urls.py
hello へのディスパッチャは include() を使用するので、include も import する。
※10 hello.urls は上記 5-2-2 で作成した hello/urls.py の意味。
"""mysite URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/2.0/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('hello/', include('hello.urls')), #--- ※10 ]
/var/www/html/mysite/$ python3.6 manage.py runserver5-4. アプリケーション hello の動作を確認できたのでテスト用 Web サーバを終了すること。
/var/www/html/mysite/$ curl http://127.0.0.1:8000/hello/ #--- 別ウィンドウで操作する
Hello Django.※11 上記 4-2-3 と同じ操作を行う。
6-1. httpd と httpd-devel (開発用ライブラリ) をインストール
$ su6-2. mod_wsgi のインストールと動作環境の調査
# yum -y install httpd --- Apache がインストール済みなら実施しない
# yum -y install httpd-devel
# pip3.6 install mod_wsgi6-3. Apache に mod_wsgi の指定を記述する (新規作成)
# pip3.6 show mod_wsgi
# mod_wsgi-express module-config
Name: mod-wsgi Version: 4.6.4 Summary: Installer for Apache/mod_wsgi. Home-page: http://www.modwsgi.org/ Author: Graham Dumpleton Author-email: Graham.Dumpleton@gmail.com License: Apache License, Version 2.0 Location: /usr/lib64/python3.6/site-packages Requires: Required-by:
インストールした mod_wsgi がコンパイルされた環境を表示する。
LoadModule wsgi_module "/usr/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so" WSGIPythonHome "/usr"
6-4. Apache を再起動 (起動) する# mod_wsgi-express module-config > /etc/httpd/conf.d/mysite.conf
本当は、 http://サーバ名/mysite/hello/ として構築したいけれど、以下 a, b の理由により、 http://サーバ名/hello/ として構築します。 a. 「python3.6 manage.py runserver」で実行した場合と、パス名を同一にできる。 --- 下記 ※13 に該当 b. mysite/settings.py の「STATIC_URL = '/static/'」をなるべく書き換えたくない。 --- 下記 ※14 に該当
# cat << EOF >> /etc/httpd/conf.d/mysite.conf
WSGIPythonPath /var/www/html/mysite
WSGIScriptAlias / /var/www/html/mysite/mysite/wsgi.py
Alias /static/ /var/www/html/mysite/static/
EOF
# cat /etc/httpd/conf.d/mysite.conf
※12 mysite は上記 4-1 で作成した Django のプロジェクト名称。
LoadModule wsgi_module "/usr/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so" WSGIPythonHome "/usr" WSGIPythonPath /var/www/html/mysite WSGIScriptAlias / /var/www/html/mysite/mysite/wsgi.py --- ※13 Alias /static/ /var/www/html/mysite/static/ --- ※14
※13 http://サーバ名/hello/ が /var/www/html/mysite/mysite/wsgi.py/hello/ としてアクセスできるようにする。
※14 http://サーバ名/static/example.css が /var/www/html/mysite/static/example.css としてアクセスできるようにする。
# systemctl restart httpd6-5. ブラウザから (Apache 経由での) 動作を確認する。
# curl http://127.0.0.1/hello/6-6. Web サーバを公開する。
# exit※15 表示結果は上記 5-3 と同じになる。
Hello Django.
そのままの設定だと外部からアクセスできない (localhost でしか動作しない) ので、変更する。6-7. デフォルト DB (SQLite) のファイルを Apache から読み書きできるようにする。
/var/www/html/mysite/$ vim ./mysite/settings.py
DEBUG と ALLOWED_HOSTS を編集する。settings.py を変更したので Apache を再起動する。
※ついでに、テンプレートディレクトリの指定も行う。
※16 DEBUG = True のままだとエラーがあったとき、ブラウザに詳細なメッセージが表示されてしまう。
~~~ TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ os.path.join(BASE_DIR, 'templates'), ], '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', ], }, }, ] ~~~ # SECURITY WARNING: don't run with debug turned on in production! DEBUG = False ALLOWED_HOSTS = ['192.168.1.100', '127.0.0.1', 'localhost'] ~~~
※17 ALLOWED_HOSTS に指定するのは、公開する Web サーバの名称。接続元ではない。
Apache の VirtualHost を使う場合は、そのサーバ名もここに記述する。
/var/www/html/mysite$ su
/var/www/html/mysite# systemctl restart httpd
/var/www/html/mysite# exit
/var/www/html/mysite$
※18 SQLite ではなく、サーバ型 (MySQL, PostgreSQL 等) の DB を使用する場合、この作業は省略可能。
/var/www/html/mysite$ cd ..
/var/www/html/$ chcon -t httpd_sys_rw_content_t mysite
/var/www/html/$ chcon -t httpd_sys_rw_content_t mysite/db.sqlite3
/var/www/html/$ chmod o+w mysite
/var/www/html/$ chmod o+w mysite/db.sqlite3