Djangoって面白そう

天婦羅蕎麦

OpenCVPython をちょこっと触って、なんとなく Pythonって面白いな〜と思った。

で、いきなりだけど Djangoってのを入れてみた。Web サイト作るときのフレームワーク(で良いのか?)らしい。動機は Web サイト(と cgi)をきれいに作り直せるかな〜?なんて淡い夢を見て。この中途半端な Python 熱が冷めるまで頑張ってトライ!

サーバはこないだ用意した Celeron 500MHz x 2 に入れた Debian Sarge を使った。特に難しいことはしていないデフォルト状態。
Django の参考にしたのはココ。インストールからチュートリアルまで。でも説明されているバージョンは 0.95 だけど、落としてきたバージョンは 0.96 で微妙な感じ。とにかく、Python のこともデータベースのことも良くわからない状態で突っ走る。


インストール
インストールの項を見ながらやっていく。
Python は 2.3.5 が入ってる。とりあえず試して遊んでみたいので Apachemod_python は後回し(と言っても既に入ってるけど)。というわけでまずはデータベースから。
sqlite3 を使うので pysqlite を入れる必要があるらしい。で、最新(だと思う) pysqlite 2.3.4 をココからダウンロード。

バイナリやらパッケージは用意されてないので、とりあえずソースをダウンロードしてきてココの手順に従ってビルド。

paraches@debian:~/myTest/pysqlite-2.3.4$ python setup.py build
running build
<省略>
src/statement.h:28 から include されたファイル中,
                 src/cursor.h:28 から,
                 src/microprotocols.c:29 から:
src/connection.h:33:21: sqlite3.h: そのようなファイルやディレクトリはありません
In file included from src/statement.h:28,
                 from src/cursor.h:28,
                 from src/microprotocols.c:29:
src/connection.h:38: error: 文法エラー before "sqlite3"
<省略>
error: command 'gcc' failed with exit status 1
paraches@debian:~/myTest/pysqlite-2.3.4$ 

何やら sqlite3.h がない!って言ってその後はエラーの山。あらら…。
あれこれ調べてみるとどうやら libsqlite3-dev があれば良いらしい。

paraches@debian:~$ sudo apt-get install libsqlite3-dev
パッケージリストを読みこんでいます... 完了
依存関係ツリーを作成しています... 完了
提案パッケージ:
  sqlite3-doc
以下のパッケージが新たにインストールされます:
  libsqlite3-dev
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
<省略>
libsqlite3-dev (3.2.1-1) を設定しています ...
paraches@debian:~$

んで、早速もう一度ビルド

paraches@debian:~/myTest/pysqlite-2.3.4$ python setup.py build
running build
running build_py
<省略>
copying doc/code/text_factory.py -> /usr/pysqlite2-doc/code
paraches@debian:~/myTest/pysqlite-2.3.4$ 

無事終了!
で、インストール

paraches@debian:~/myTest/pysqlite-2.3.4$ python setup.py install
running install
<省略>
paraches@debian:~/myTest/pysqlite-2.3.4$ 

も問題なく終了。

次はテスト

paraches@debian:~/myTest/pysqlite-2.3.4$ python
Python 2.3.5 (#2, Oct 16 2006, 19:19:48)
[GCC 3.3.5 (Debian 1:3.3.5-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pysqlite2 import test
---------------------------------------------------------------------------
You should not run the test suite from the pysqlite build directory.
This does not work well because the extension module cannot be found.
Just run the test suite from somewhere else, please!
---------------------------------------------------------------------------
paraches@debian:~/myTest/pysqlite-2.3.4$ 

あらら、別のフォルダでやれって。
もう一度

paraches@debian:~/myTest/pysqlite-2.3.4$ cd ..
paraches@debian:~/myTest$ python
Python 2.3.5 (#2, Oct 16 2006, 19:19:48)
[GCC 3.3.5 (Debian 1:3.3.5-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pysqlite2 import test
>>> test.test()
.............................................................................................................................................................

ん? 止まった… なんで?
あれこれ調べてみたけど、良くわからん! このまま続行!


準備が済んだので次は Django をインストールしてみる!
ココからダウンロードしてきてそれを tar zxvf Django-0.96.tar.gz で展開してインストール開始。

paraches@debian:~/myTest/Django-0.96$ sudo python setup.py install
running install
error: invalid Python installation: unable to open /usr/lib/python2.3/config/Makefile (No such file or directory)
paraches@debian:~/myTest/Django-0.96$ 

あり? エラーじゃん!!! どうすんのよ?
で、あれこれ調べてみると、どうやら python-dev が入ってないのが原因らしい。
というわけで python-dev のインストール!

paraches@debian:~/myTest/Django-0.96$ sudo apt-get install python-dev
パッケージリストを読みこんでいます... 完了%
依存関係ツリーを作成しています... 完了%     
以下の特別パッケージがインストールされます:
  python2.3-dev
以下のパッケージが新たにインストールされます:
  python-dev python2.3-dev
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
<省略>
python-dev (2.3.5-2) を設定しています ...
paraches@debian:~/myTest/Django-0.96$ 

んで、再度インストールにトライ!

paraches@debian:~/myTest/Django-0.96$ sudo python setup.py install
running install
running build
running build_py
creating build
<省略>
copying django/contrib/sitemaps/templates/sitemap.xml -> /usr/lib/python2.3/site-packages/django/contrib/sitemaps/templates
copying django/contrib/sitemaps/templates/sitemap_index.xml -> /usr/lib/python2.3/site-packages/django/contrib/sitemaps/templates
paraches@debian:~/myTest/Django-0.96$ 

を! エラー無しでインストール終了!


チュートリアル
インストール終了したので、チュートリアルをスタート。まずは Django がちゃんとインストールされているかどうか?

paraches@debian:~/myTest$ python
Python 2.3.5 (#2, Oct 16 2006, 19:19:48) 
[GCC 3.3.5 (Debian 1:3.3.5-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> 

エラー出さずに import できたので、インストールはちゃんとできているらしい。
次は最初のプロジェクト作成

paraches@debian:~/myTest$ django-admin.py startproject mysite
paraches@debian:~/myTest$ ls
:2eDS_Store  Django-0.96  Django-0.96.tar.gz  mysite
paraches@debian:~/myTest$ 

これも問題なし。これはこの先も良い感じ?
できた mysite の中身はこんな感じ。

paraches@debian:~/myTest$ ls -al mysite/
合計 20
drwxr-xr-x  2 paraches paraches 4096 2007-07-03 01:02 .
drwxr-xr-x  5 paraches paraches 4096 2007-07-03 01:02 ..
-rw-r--r--  1 paraches paraches    0 2007-07-03 01:02 __init__.py
-rw-r--r--  1 paraches paraches  546 2007-07-03 01:02 manage.py
-rw-r--r--  1 paraches paraches 2804 2007-07-03 01:02 settings.py
-rw-r--r--  1 paraches paraches  225 2007-07-03 01:02 urls.py
paraches@debian:~/myTest$ 

で、Django の開発用サーバを起動してプロジェクトの動作確認。

paraches@debian:~/myTest/mysite$ python manage.py runserver
Validating models...
0 errors found.

Django version 0.96, using settings 'mysite.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

この状態でターミナルは止まる(というかずっと実行中になる)。
で、ブラウザで port 8000 にアクセスすれば良いのね。
って、サーバにはモニタ繋いでないし…。
仕方がないのでほかのマシンから Safarihttp://192.168.1.13:8000 にアクセスしても「サーバに接続できません」って言われる…
さっきのサーバの方の画面にも反応無しだな。
次にターミナルもう一つ開いて今度は wget してみた。

paraches@debian:~/myTest/mysite$ wget http://127.0.0.1:8000/
--01:18:10--  http://127.0.0.1:8000/
           => `index.html'
127.0.0.1:8000 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 404 NOT FOUND
01:18:10 エラー 404: NOT FOUND。

paraches@debian:~/myTest/mysite$ 

あれれ? 404 NOT FOUND じゃん…
Django が自前で用意してるサーバなんだから、apache の設定は関係ないよな。そしたら特別な設定なんて必要無いはずなのに、なんで 404 NOT FOUND なんだ?

で、もうちょっとあれこれ読んでみると、他のマシンから見えるようにする設定を発見。さっきのコマンドの後ろにアドレスとポートを加えれば良いらしい。

paraches@debian:~/myTest/mysite$ python manage.py runserver 192.168.1.13:8000
Validating models...
0 errors found.

Django version 0.96, using settings 'mysite.settings'
Development server is running at http://192.168.1.13:8000/
Quit the server with CONTROL-C.

他のマシンから http://192.168.1.13:8000/ にアクセスしてみると…

paraches@debian:~/myTest/mysite$ python manage.py runserver 192.168.1.13:8000
Validating models...
0 errors found.

Django version 0.96, using settings 'mysite.settings'
Development server is running at http://192.168.1.13:8000/
Quit the server with CONTROL-C.
[03/Jul/2007 13:00:54] "GET / HTTP/1.1" 404 2053


をを!ちゃんとアクセスできた!
というわけで、とりあえず今回はここまで。