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

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
編集の要約なし
==[[Django 最初のアプリケーション 1 ]] (環境設定~モデルの作成)==[[Django 最初のアプリケーション 2]] | ] Django[Python][[Python]Django 最初のアプリケーション 2] | [[[[次]] |
Pythonの概要も分かり易い[[Python]]の概要も分かり易い.
{{amazon|477413760X}}
を参考にサンプルアプリケーションを作成してみる
===Djangoがインストールされている[[Django]]がインストールされている===*[[Django インストール]]
=====import django がpythonインタプリタから行えること=====
# python
[[Python ]] 2.6.2 (r262:71600, Jun 13 2009, 02:28:29)
[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]]を確認=====
>>> help(django)
[[Help ]] on package django:
NAME
===プロジェクトの作成===
====django-admin.py コマンドの実行====
*Djangoを最初に利用する場合、初期化処理を行う必要がある[[Django]]を最初に利用する場合、初期化処理を行う必要がある
*コードを置こうと思っているディレクトリで、以下のコマンドを実行(mysiteディレクトリが作成される)
# django-admin.py startproject mysite
*
<blockquote>プロジェクト名に、djangoやtestは避けること</blockquote>
*django-admin.py は、Django は、[[Django]] を setpu.py でインストールしたシステムパス(/usr/local/binのような)にある。
# whereis django-admin.py
django-admin: /usr/local/bin/django-admin.py
|-
|__init__.py
|このディレクトリがパッケージだとPythonに伝える空のファイルこのディレクトリがパッケージだと[[Python]]に伝える空のファイル
|-
|manage.py
|-
|urls.py
|プロジェクトのURL宣言 プロジェクトのU[[R]]L宣言
|-
|}
0 errors found
[[Django ]] version 1.0.2 final, using settings 'mysite.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROLCONT[[R]]OL-C.*開発サーバーを起動すると、Pythonで書かれた軽量サーバーが 開発サーバーを起動すると、[[Python]]で書かれた軽量サーバーが http://127.0.0.1:8000/ で起動する
====起動ポート、IPアドレスを変更する====
*デフォルトで開発サーバーはポート8000で起動するが、ポートを指定して起動することもできる。
0 errors found
[[Django ]] version 1.0.2 final, using settings 'mysite.settings'
Development server is running at http://192.168.24.14:8080/
Quit the server with CONTROLCONT[[R]]OL-C.
=====起動=====
[[File:0350_django_firstapp01.jpg]]
|-
|DATABASE_ENGINE
|'postgresql_psycopg2'、'mysql'、'sqlite3[[sqlite]]3'その他
|-
|DATABASE_NAME
|データベース名。SQLiteの場合、絶対パス名存在しない場合、初回自動的に作成される。データベース名。[[SQL]]iteの場合、絶対パス名存在しない場合、初回自動的に作成される。
|-
|DATABASE_USER
| データベースユーザー名。SQLiteの場合不要データベースユーザー名。[[SQL]]iteの場合不要
|-
|DATABASE_PASSWORD
|データベースパスワード。SQLiteの場合不要データベースパスワード。[[SQL]]iteの場合不要
|-
|DATABASE_HOST
|データーベースのホスト。設定しない場合、物理的に同じマシンとみなされる。SQLiteでは不要データーベースのホスト。設定しない場合、物理的に同じマシンとみなされる。[[SQL]]iteでは不要
|-
|}
====SQLiteは、Pytho2[[SQL]]iteは、Pytho2.5以降に含まれる====*SQLiteを使用する場合、DATABASE_ENGINEに sqlite3を指定する[[sqlite]]3を指定する*Python2[[Python]]2.5以降に含まれるため、他にインストール等不要
<blockquote>SQLiteを指定した場合準備は不要。データベースファイルは必要になったときに作成される[[SQL]]iteを指定した場合準備は不要。データベースファイルは必要になったときに作成される</blockquote>
====PostgreSQLを利用してみる[[PostgreSQL]]を利用してみる====*[[PostgreSQL 8.3.5 インストール]]*[[PostgresSQL 8.3.5 起動と停止]]*[[PostgreSQL pgAdminのインストール]]
DATABASE_ENGINE = 'postgresql_psycopg2'
DATABASE_NAME = 'testdb'
DATABASE_USER DATABASE_USE[[R]] = 'postgres' DATABASE_PASSWORD DATABASE_PASSWO[[R]]D = '******'
DATABASE_HOST = ''
DATABASE_PORT DATABASE_PO[[R]]T = '5432'
====psycopg Python-[[PostgreSQL ]] Database Adapterのインストール====
http://www.initd.org/pub/software/psycopg/
http://www.initd.org/pub/software/psycopg/psycopg2-2.0.11.tar.gz
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.6/site-packages/psycopg2/__init__.py", line 60, in <module>
from _psycopg import BINARYBINA[[R]]Y, NUMBERNUMBE[[R]], STRINGST[[R]]ING, DATETIME, ROWID[[R]]OWID
ImportError: libpq.so.5: cannot open shared object file: No such file or directory
*[[PostgreSQL 8.3.5 インストール] [|libpq.so が見つからないエラー]] # LD_LIBRARY_PATHLD_LIB[[R]]A[[R]]Y_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATHLD_LIB[[R]]A[[R]]Y_PATH
OK
====syncdbの実行====
=====PostgreSQLを起動しておく[[PostgreSQL]]を起動しておく=====
#pg_ctl start
=====syncdbコマンドの実行=====
Creating table django_site
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 'root'):
[[File:0351_django_firstapp02.jpg]]
=====INSTALLED_APPS設定=====
*INSTALLED_APPS変数は、このDjangoインスタンスからアクティベートされるすべてのDjangoアプリケーションで保持されるINSTALLED_APPS変数は、この[[Django]]インスタンスからアクティベートされるすべての[[Django]]アプリケーションで保持される
INSTALLED_APPS = (
'django.contrib.auth',
====アプリケーションの作成====
*ここまでで、プロジェクト環境は作成された
*Djangoのアプリケーションは、PythonのパッケージDjangoのアプリケーションは、[[Python]]のパッケージ
<blockquote>プロジェクトは設定のコレクションであり、アプリケーションは特定のWebサイト。プロジェクトは複数のアプリケーションを含み、アプリケーションは複数のプロジェクトに属すことができる</blockquote>
|-- __init__.py
|-- models.py
`-- views[[vi]]ews.py
====モデルの作成====
*[[Django ]] Web アプリケーションでは、モデルを定義する
*単純なサンプルアプリケーション(poll)では、2つのモデル polls、choicesを作成する
*pollは、質問と発表日、choiceは選択テキストと同意への投票の2つのフィールドを持つ
====DDLの確認~テーブルの生成====
*Djangoは、pollsを含むmysiteを認識しているので、以下のコマンドを実行[[Django]]は、pollsを含むmysiteを認識しているので、以下のコマンドを実行*[[PostgresSQL 8.3.5 起動と停止|データベースを起動しておく] [データベースを起動しておく]
=====DDLを発行し、テープルを作成する=====
# python manage.py sql polls
BEGIN;
CREATE C[[R]]EATE TABLE "polls_poll" ( "id" serial NOT NULL PRIMARY P[[R]]IMA[[R]]Y KEY,
"question" varchar(200) NOT NULL,
"pub_date" date NOT NULL
)
;
CREATE C[[R]]EATE TABLE "polls_choice" ( "id" serial NOT NULL PRIMARY P[[R]]IMA[[R]]Y KEY, "poll_id" integer NOT NULL REFERENCES [[R]]EFE[[R]]ENCES "polls_poll" ("id") DEFERRABLE DEFE[[R]][[R]]ABLE INITIALLY DEFERREDDEFE[[R]][[R]]ED,
"choice" varchar(200) NOT NULL,
"votes" integer NOT NULL
)
;
COMMIT[[COM]]MIT;
=====テーブルの生成=====
# python manage.py syncdb
>>> p.id
1L
#Pythonの属性を経由してデータベースのカラムにアクセス[[Python]]の属性を経由してデータベースのカラムにアクセス
>>> p.question
"What's up?"
>>> from mysite.polls.models import Poll,Choice
#Djangoは高機能なlookup [[Django]]は高機能なlookup APIを提供
>>> Poll.objects.filter(id=1)
[<Poll: What's up?>]
True
#INSERTステートメントの記述なしに、createの呼び出しでChoiceオブジェクトを生成するINSE[[R]]Tステートメントの記述なしに、createの呼び出しでChoiceオブジェクトを生成する
#外部キー制約を指定したのでchoice_set が有効
>>> p.choice_set.create(choice='Not much',votes=0)
<blockquote>APIは自動的にリレーションシップ(参照整合性制約)をフォローする。アンダースコアの2重続きは、リレーションシップを区別する</blockquote>
[[Django 最初のアプリケーション 2]] | ] [[[次]] |

案内メニュー