==Django 最初のアプリケーション 1 (環境設定~モデルの作成)==
[[Django 最初のアプリケーション 2]] Django][Python][[[次]]
Pythonの概要も分かり易い.
[GCC 4.1.2 20070626 (Red Hat 4.1.2-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> >>> import django
=====Helpを確認=====
>>> >>> help(django)
Help on package django:
*
<<blockquote>>プロジェクト名に、djangoやtestは避けること<</blockquote>>
*django-admin.py は、Django を setpu.py でインストールしたシステムパス(/usr/local/binのような)にある。
# whereis django-admin.py
*Python2.5以降に含まれるため、他にインストール等不要
<<blockquote>>SQLiteを指定した場合準備は不要。データベースファイルは必要になったときに作成される<</blockquote>>
====PostgreSQLを利用してみる====
*インポートできるか?
#python
>>> >>> import psycopg2
Traceback (most recent call last):
File "<<stdin>>", line 1, in <<module>> File "/usr/local/lib/python2.6/site-packages/psycopg2/__init__.py", line 60, in <<module>>
from _psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
ImportError: libpq.so.5: cannot open shared object file: No such file or directory
*Djangoのアプリケーションは、Pythonのパッケージ
<<blockquote>>プロジェクトは設定のコレクションであり、アプリケーションは特定のWebサイト。プロジェクトは複数のアプリケーションを含み、アプリケーションは複数のプロジェクトに属すことができる<</blockquote>>
=====サンプルアプリケーション(polls)の作成=====
# python manage.py startapp polls
=====Shellからdatabase APIを利用=====
>>> >>> from mysite.polls.models import Poll,Choice #モデルとクラスのインポート
#まだpollsは存在していない
>>> >>> Poll.objects.all()
[]
#pollを生成
>>> >>> import datetime >>> >>> p = Poll(question="What's up?",pub_date=datetime.datetime.now()) >>> >>> p.save() >>> >>> p.id
1L
#Pythonの属性を経由してデータベースのカラムにアクセス
>>> >>> p.question
"What's up?"
>>> >>> p.pub_date
datetime.datetime(2009, 6, 16, 8, 54, 31, 757771)
>>> >>> p.save()
#データベース上のpollを表示
>>> >>> Poll.objects.all() [<<Poll: Poll object>>] >>> >>>
データベース上にデータが作成されている
[[File:0353_django_firstapp04.jpg]]
====__unicode__メソッドの追加====
>>> >>> Poll.objects.all() [<<Poll: Poll object>>]
*この出力では、このオブジェクトを表現するには役に立っていないので、polls/models.py のクラスに__unicode__メソッドを追加する
*出力がこうなる
>>> >>> Poll.objects.all() [<<Poll: What's up?>>]
====カスタムメソッドの追加====
return self.pub_date == datetime.date.today()
>>> >>> from mysite.polls.models import Poll,Choice
#Djangoは高機能なlookup APIを提供
>>> >>> Poll.objects.filter(id=1) [<<Poll: What's up?>>] >>> >>> Poll.objects.filter(question__startswith='What') [<<Poll: What's up?>>] >>> >>> p = Poll.objects.get(id=1)
#カスタムメソッドが動作することを確認
>>> >>> p.was_published_today()
True
#INSERTステートメントの記述なしに、createの呼び出しでChoiceオブジェクトを生成する
#外部キー制約を指定したのでchoice_set が有効
>>> >>> p.choice_set.create(choice='Not much',votes=0) <<Choice: Not much>> >>> >>> p.choice_set.create(choice='The sky',votes=0) <<Choice: The sky>> >>> >>> c = p.choice_set.create(choice='Just hacking again',votes=0) >>> >>> Choice.objects.filter(poll__pub_date__year=2009) [<<Choice: Just hacking again>>, <<Choice: The sky>>, <<Choice: Not much>>] >>> >>> c = p.choice_set.filter(choice__startswith='Just hacking') >>> >>> c.delete()
<<blockquote>>APIは自動的にリレーションシップ(参照整合性制約)をフォローする。アンダースコアの2重続きは、リレーションシップを区別する<</blockquote>>
[[Django 最初のアプリケーション 2]] [[次]]