MacでDjangoをさわってみた

新年,あけましておめでとうございます.
年明け一発目はPythonネタです.PythonのWebアプリケーションフレームワークはいくつかあって,Ruby on RailsみたいWebアプリならこれ!という状況にはなっていません.私はTurboGears派で今までDjangoを触ったことがありませんでしたが,昨年末にリリースされたTurboGears 2.0β1がうまく導入できなかったので,Google App Engineでも採用されたDjangoも試してみることにしました.
第6回 Djangoフレームワークを利用してWebアプリケーションを作成する | 日経 xTECH(クロステック)を参考にやったのですが,一部うまくいかなかったので補足しておきます.今回使用したバージョンはPython 2.5.2とDjango 1.0.2です.また,DBにはSQLiteを使いました.

インストール

必要なものはすべてMacPortsでインストールできます.この辺のお手軽さはDjangoの魅力でしょうか.DjangoはSQLite3を要求するので,Python 2.5を使っていても別途インストールが必要です.

$ sudo port install py25-hashlib
$ sudo port install py25-zlib
$ sudo port install py25-sqlite3
$ sudo port install py25-django 

データベースの設定

SQLiteを使うのでmyprj/settings.pyを次のように変更します.

DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = '/Users/name/myprj/site.db'

DBに関する他の項目は使用しません.DATABASE_NAMEには使用する.dbファイルの名前をフルパスで指定します.

X-MAC-JAPANESE

しばらく進めるとX-MAC-JAPANESEというエラーがでるので修正します.Djangoで「X-MAC-JAPANESE〜」とかエラーが出たら - 牌語備忘録 -pygoを参考にしました.
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/utils/tzinfo.pyの8行目あたりを修正します.

DEFAULT_ENCODING = locale.getdefaultlocale()[1] or 'ascii' # この行を探して下2行を追加
if DEFAULT_ENCODING == 'X-MAC-JAPANESE':
    DEFAULT_ENCODING = 'ascii' 

これでもまだ文字コードの問題がでる場合は,日本語を含むファイル(コメントも含めて)の冒頭に

# -*- encoding: utf-8 -*-

を記述しているか確認してください.

myappと管理ページをサイト設定に追加

ITproの記事はこの説明が抜けているので,http://localhost:8000/にアクセスしてもTemplateSyntaxErrorになるし,http://localhost:8000/admin/にアクセスしても管理ページが表示されないしという致命的な状態になっています.解決するために,myprj/settings.pyのTEMPLATE_DIRSとINSTALLED_APPSを編集します.

TEMPLATE_DIRS = (
    "/Users/name/myprj/myapp/templates/"
)

INSTALLED_APPS = (
    ....
    'django.contrib.admin',
    'myprj.myapp' 
)

TEMPLATE_DIRSはDjango標準以外の場所にテンプレートを置く場合に,その場所を検索パスに追加するように指定する変数です.次に追加したアプリのテーブルを作成します.

$ python manage.py syncdb

最後に

今回ITproを参考にやりましたが,実は公式ドキュメントのはじめてのDjangoアプリ作成が非常によくできているので,Djangoがどんなものか試してみたいならこちらがおすすめです.最後に雑感を記しておきます.

  • 1つのパッケージをインストールするだけで済む
  • ORMが簡単(SQLObjectみたい)
  • URLのマッピング正規表現で自由自在
  • 基本的に関数ベース
  • 高度な管理画面を自動生成できる
  • 汎用ビューの概念がある
  • 日本語ドキュメントが豊富
  • 高速らしい
  • テンプレートの記法がやや冗長