| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

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

案内メニュー