今までまじめにdjangoで作ってなかったので、公開した際にアラが出たのでメモ書き。
2時間ほどでさくっと各ブックマークサイトのブックマークトップ一覧*1を表示するサイトを作ったのだけど、公開したらいろいろがたがたとなったので、反省を込めて。
model名
OjbCの癖で変数やクラス名を付ける時、単語の先頭は大文字という事をやらかします。例えば「bookmark site」だと、Perlの場合は「bookmark_site」だけど、ObjCの場合「bookmarkSite」にします。Pythonコード内ではそれで良い?のですが、SQLの場合は大文字小文字が関係ないので、一見うまくいってるようでもクライアント/サーバのライブラリによってはエラーを吐く場合があります。
少なくともうちのところ、クライアントはPostgreSQL8.2.3、サーバはPostgreSQL8.3.5の場合だと、SQLエラーを吐かれてうまくいきませんでした。
500.html
ほとんどDEBUG環境下で作業していたので全く気にしていなかったのですが、template以下に500.htmlが必要なのです。404.htmlも必要かも。
Cache
全く考えたことがありませんでした。申し訳ありませんでした。現在勉強中。おかげで表示が2.3sかかって重たい状態・・・orz
コマンド
ちゃんとmanage.pyで作成するコマンドもあるのですが、わたしゃ面倒で、自分でコマンドを作ってしまいます。そうするとdjangoのプロジェクトフォルダーにPythonPathを通さないと行けないわけで、それではまった。ちなみに、プロジェクトフォルダーでmodelなどをimportするには、settings.pyを通さないといけないです。その、settings.pyを通す方法。*2
from django.core.management import execute_manager, setup_environ os.chdir(os.getcwd()) sys.path.append(os.getcwd()) import tewi.settings as settings prjdir = setup_environ(settings)
Apache
こんな感じの設定。
# $Id: tewi.a-yasui.info.conf,v 1.1 2009/01/27 18:52:07 yasui Exp $ # $Date: 2009/01/27 18:52:07 $ <VirtualHost *:80> <IfModule !mod_python.c> LoadModule python_module libexec/apache22/mod_python.so </IfModule> DocumentRoot /path/to/tewi/public_html/ ServerName tewi.a-yasui.info CustomLog /path/to/log/tewi.access.log combined ErrorLog /path/to/log/tewi.error.log <Directory /> AllowOverride All Options All </Directory> <Location "/"> SetHandler Python-program PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE tewi.settings PythonAutoReload Off PythonPath "['/path/to/tewi'] + sys.path" # Insert filter SetOutputFilter DEFLATE # Netscape 4.x has some problems... BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48 # the above regex won't work. You can use the following # workaround to get the desired effect: BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Don't compress images SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary # Make sure proxies don't deliver the wrong content Header append Vary User-Agent env=!dont-vary </Location> <Location "/media"> SetHandler None </Location> </VirtualHost>
余談
趣味でDjango1.1αを使っているのですが、startprojectをするとtests.pyというdoctestのファイルが出来ます。ただ、これどうやって使うの・・・?
参考とか
参考サイト: http://djangoproject.jp/doc/ja/1.0/
作成したサイト: http://tewi.a-yasui.info/