Debian 環境でも評価にトライ

なんか暇人クサい。とりあえず SD な本にある特徴の内、気になる部分を以下に列挙。

  • cache
  • 継承可能なテンプレート
  • 国際化
  • テストクライアント / テストランナー

も少しツッコんで動作確認を行なった挙句に apache 配下に配置して、色々確認してみたい、というかソコまでやらんと動作確認にはならんな。

環境構築

django をどこに置くか、とゆーのが問題。資料チェックしたトコでは、django は setup.py というナニがあるんでそれを使えば良い、とある。chroot な環境で試験中なんですが、Debian のバージョンが上がったのを忘れててとりあえず、testing な upgrade 中。時間がかかりそうなんで、このまま fadeout しそうな予感。

と、言いつつもなんとなく終わったんで django を download。解凍して以下。

$ cd Django-0.95.1
$ su
password:
# python setup.py install
(出力略

略された出力の終わりあたりにこんな出力が

Installing easy_install script to /usr/bin
Installing easy_install-2.4 script to /usr/bin

Installed /usr/lib/python2.4/site-packages/setuptools-0.6c1-py2.4.egg
Processing dependencies for setuptools==0.6c1
Processing Django-0.95.1-py2.4.egg
creating /usr/lib/python2.4/site-packages/Django-0.95.1-py2.4.egg
Extracting Django-0.95.1-py2.4.egg to /usr/lib/python2.4/site-packages
Adding Django 0.95.1 to easy-install.pth file
Installing django-admin.py script to /usr/bin

Installed /usr/lib/python2.4/site-packages/Django-0.95.1-py2.4.egg
Processing dependencies for Django==0.95.1

むむ。/usr/bin ですか。とりあえずスルーで developerworks のソレをなぞってみる。

プロジェクトとアプリケーション

メンドいのでコマンドのみ

$ django-admin.py startproject djproject
$ cd djproject/
$ ls
__init__.py  manage.py  settings.py  urls.py
$ python manage.py startapp jobs
$ cd jobs/
$ ls
__init__.py  models.py  views.py
$ 

で、djproject の settings.py のソレを以下に。

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'djproject.jobs',
)

編集用の emacspython な mode になってないな。ま、いいや。どんどんナゾる。

モデル

settings.py の修正は略。jobs/models.py の修正も略。で、試験。

$ python manage.py sql jobs
BEGIN;
CREATE TABLE "jobs_job" (
    "id" integer NOT NULL PRIMARY KEY,
    "pub_date" date NOT NULL,
    "job_title" varchar(50) NOT NULL,
    "job_description" text NOT NULL,
    "location_id" integer NOT NULL
);
CREATE TABLE "jobs_location" (
    "id" integer NOT NULL PRIMARY KEY,
    "city" varchar(50) NOT NULL,
    "state" varchar(50) NULL,
    "country" varchar(50) NOT NULL
);
-- The following references should be added but depend on non-existant tables:
COMMIT;
$

なんと色付き。syncdb すると以下。

$ python manage.py syncdb
Creating table auth_message
Creating table auth_group
Creating table auth_user
Creating table auth_permission
Creating many-to-many tables for Group model
Creating many-to-many tables for User model
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table jobs_job
Creating table jobs_location

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'rms'): admin
E-mail address:
Error: That e-mail address is invalid.
E-mail address: adm@dummy.com
Password:
Password (again):
Superuser created successfully.
Adding permission 'message | Can add message'
Adding permission 'message | Can change message'
Adding permission 'message | Can delete message'
Adding permission 'group | Can add group'
Adding permission 'group | Can change group'
Adding permission 'group | Can delete group'
Adding permission 'user | Can add user'
Adding permission 'user | Can change user'
Adding permission 'user | Can delete user'
Adding permission 'permission | Can add permission'
Adding permission 'permission | Can change permission'
Adding permission 'permission | Can delete permission'
Adding permission 'content type | Can add content type'
Adding permission 'content type | Can change content type'
Adding permission 'content type | Can delete content type'
Adding permission 'session | Can add session'
Adding permission 'session | Can change session'
Adding permission 'session | Can delete session'
Creating example.com Site object
Adding permission 'site | Can add site'
Adding permission 'site | Can change site'
Adding permission 'site | Can delete site'
Adding permission 'job | Can add job'
Adding permission 'job | Can change job'
Adding permission 'job | Can delete job'
Adding permission 'location | Can add location'
Adding permission 'location | Can change location'
Adding permission 'location | Can delete location'
$

一応なんとなってる、という事で。

クエリーセット

windows で試験してる時には試さ (せ) なかったんですが、試験の方法のみを以下に。以下のコマンドでシェルを起動するらしい。

$ python manage.py shell
(以下略

管理者ツール

もう少し頑張ってみる。setting.py に django.contrib.admin を追加。djproject/urls.py なソレを uncomment。で、以下。

$ python manage.py syncdb
Creating table django_admin_log
Adding permission 'log entry | Can add log entry'
Adding permission 'log entry | Can change log entry'
Adding permission 'log entry | Can delete log entry'
$

で、試験用のサーバを起動。

$ python manage.py runserver
Validating models...
0 errors found.

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

http://localhost:8000/admin アクセスできます。モデルに admin なソレも盛り込んで試験してみましたが、詳細は略。

ビューの実装

urls.py と jobs/urls.py を盛り込み、jobs/views.py を以下の形で実装後、http://localhost:8000/jobs にアクセス。

from django.http import HttpResponse

def index(request):
    return HttpResponse("Job Index View")

もう少し頑張ってみる。

テンプレートを作成

しかし一生懸命ヤッてる割に DRY という観点においてダウトだな。と、言いつつ死亡。