VALUE-SERVERでdjango
前回はbottleだったので今回はdjangoを同じようにやってみようと思います。やることはdjango tutorialです。
venvの仮想環境構築
$ cd ~/public_html/elephantcat.work/cgi-bin/
$ python3 -m venv fordjango
$ . ./fordjango/bin/activate
(fordjango) $
djangoのインストール
(fordjango) $ pip install --upgrade pip
(fordjango) $ pip install django
(fordjango) $ python -m django --version
3.0.2
djangoプロジェクト作成
(fordjango) $ django-admin startproject djangoroot
(fordjango) $ cd djangoroot
このフォルダにはパスワードなども入るので、今のうちに.htaccessでwebからアクセスできないようにしておきます。
deny from all
django用のmysql設定
djangoはデフォルトだとdatabaseにsqlite3を使います。VALUE-SERVERでも sqlite3は使えるのですが、バージョンに問題があって、エラーになります。なので今回はmysqlを使います。私のようにエコプランの方はdatabase1つしかないのでテーブル名に衝突がないように注意してください。
さて、WordPressとか使うために事前にmysql自体の設定はしてますよね?そこは端折って、djangoからmysqlを使う設定をしていきます。
(fordjango) $ vi djangoroot/settings.py
↓な辺りをこんなふうに修正します。
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
'ENGINE': 'django.db.backends.mysql',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'NAME': 'databasename', # VALUE-SERVERではユーザーIDと同じ
'USER': 'username', # ユーザーIDを入れてください
'PASSWORD': 'password', # パスワードを入れてください
'HOST': 'localhost',
'PORT': '3306',
}
}
ここでオススメされてるpython用のmysql接続モジュールをインストール
(fordjango) $ pip install mysqlclient
Pollsアプリの作成
(fordjango) $ python manage.py startapp polls
チュートリアルのとおりにviewを用意します(プロジェクト名だけdjangorootなので注意)。
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
"""djangoroot URL Configuration
ドキュメントコメントなので省略
"""
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
チュートリアルはまだ続くわけですが、この辺で一回画面が見たい…でもrunserverはレンタルサーバでは出来ないので、重い腰を上げてCGIで繋ぎます。
CGIでdjangoを呼ぶ
今さら断っておくと、djangoは正式にCGIをサポートしていません。サポートしているのはFastCGI/SCGI/WSGIとかです。理由はとにかく遅いから!
遅くてもいいからとにかく繋ぎたいんじゃ~という人のためにチョロっとCGIスクリプトを書いてくれたものがコレ。
これをcgi-binに置くのですが、そのままでは使えないので、まずはこちらの環境に合わせてシバンをvenv用に直します。
#!(ホーム)/public_html/elephantcat.work/cgi-bin/fordjango/bin/python
...
次に最後の部分をdjangoプロジェクトの設定に合わせれば使えます。
...
# Change this to the directory above your site code.
sys.path.append("(ホーム)/public_html/elephantcat.work/cgi-bin/djangoroot")
# Change mysite to the name of your site package
os.environ['DJANGO_SETTINGS_MODULE'] = 'djangoroot.settings'
run_with_cgi(get_wsgi_application())
ここまでで実行可能にすればdjangoフレーム自体は動作します。が、最後にサイトの設定settings.pyを修正します。
許可ドメイン追加とデバッグ設定OFF。 デバッグ設定OFFにするとエラー発生時のデバッグ情報からパスワードなどの漏洩が防げます。
...
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
ALLOWED_HOSTS = [
'elephantcat.work'
]
...
あとはcgiスクリプトを実行可能にするだけ!
(fordjango) $ chmod u+x django.cgi
上記で動作するようになったpollsアプリがこちら。
実際のチュートリアルはまだ続くのですが、今回はここまで。
一応再度書いておくと、djangoはCGIで使っちゃダメです。
ディスカッション
ピンバック & トラックバック一覧
[…] 前回と前々回で作成したHello, World!なアプリを外からGetして時間を測定してみました。 […]