Refactoring My Intelligence

技術的/非技術的な雑記,備忘録等々

Django1.5 tutorial Part 1 個人的メモ

DjangoのインストールはDjangoドキュメントの通りにやっておくこと.

Djangoがインストールされているかの検証は以下のようにコマンドラインで打ってバージョン情報が出力されればOK.

python -c "import django; print(django.get_version())"

プロジェクトの作成

django-admin.py startproject mysite

上記コマンドを実行するとmysiteディレクトリがカレントディレクトリに作成される.作成されるディレクトリ構成は以下の通り.

mysite/
  manage.py       # Djangoの管理コマンドを提供
  mysite/            # このプロジェクトのためのPythonパッケージ
      __init__.py
      settings.py   # このプロジェクトの設定情報を管理
      urls.py
      wsgi.py

開発用サーバー

開発用の簡易Webサーバーを立ち上げることでDjangoプロジェクトの動作チェックが可となる.外側のmysiteディレクトリに移動して以下のコマンドを実行する.

python manage.py runserver 
# または python manage.py runserver 8080  # port番号の指定
# または python manage.py runserver 0.0.0.0:8000 # IPアドレスとport番号の指定

Databaseの設定

mysite/settings.py中のDATABASES辞書中の'default'項目の各設定値を適切なものに変更する.

  • ENGINE
    • 'django.db.backends.postgresql_psycopg2'
    • 'dango.db.backends.mysql'
    • 'django.db.backends.sqlite3'
    • 'django.db.backends.oracle'
    • その他
    • 上記のどれかを指定する
  • NAME
    • SQLiteを使っている場合,databaseはマシン上のファイルとして存在するので,NAMEにはそのファイルのフルパスを指定すればよい.
  • USER
  • PASSWORD
  • HOST
    • Databaseが稼働しているホスト名を指定する

その他TIME_ZONEを設定したりする.

またINSTALLED_APPSタプルではこのDjangoインスタンスで有効化するアプリケーションを指定する.これらの各アプリケーションは少なくとも一つのDBテーブルを使用するので,以下のようにDBの初期化コマンドを実行する.このコマンドはDBの生成等を行う.

python manage.py syncdb

syncdbコマンドはINSTALLED_APPSの設定を見て必要なDBテーブルを生成する.

モデルの作成

次に行うのはappの生成である.DjangoはMTV(Model-View-Template)モデルのフレームワークらしい

DjangoにおけるProjectとappsの違い

appsはWebアプリケーション(ブログ等)で,Projectは特定のWebサイトにおける設定やappsのコレクションである.なので,あるProjectは複数のappsを持つ事が出来るし,あるappは異なる複数のProjectに所属することも出来る.

また,appsはpythonのパスが通っているところならどこに置いておいても動作は可能(実際はただのPythonパッケージなので)だが,通常は所属するProjectのディレクトリ配下に置かれる.

モデル作成

appを作るにはmanage.pyを実行する.

python manage.py startapp polls

このチュートリアルではpollsというアプリを作成している.上記を実行するとpollsディレクトリが作成される.pollsディレクトリの構造は以下の通り.

polls/
    __init__.py
    models.py
    tests.py
    views.py

Djangoにおけるdatabase(を使う)Webアプリを書くための最初のステップはモデルを定義することである.

このチュートリアルではPollとChoiceの二つのモデルを作る.

from django.db import models

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

各クラスのフィールド(CharField, DateTimeField等)はFieldクラスのインスタンスを表している.そしてFieldインスタンスの名前(questionやpub_date)はクラスのフィールド名であり,Pythonコード中で参照可能であり,かつDBのテーブルの列名も兼ねている.

モデルの有効化

model.pyにモデルを記述すると以下のことが出来るようになる.

  • このアプリのためのDBスキーマ(CREATE TABLE文)の生成
  • PollやChoiceオブジェクトのDBアクセス用APIの生成

でも最初にやることはsettings.py中のINSTALLED_APPSに新規作成したPollsアプリを登録すること.やり方は以下の通り.

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'polls',
)

そうすると以下のコマンドを実行してDBスキーマ用のSQL文を確認出来る.

python manage.py sql polls

注意点として,sqlコマンドは実際にSQLを実行する訳ではなく,あくまでもDjangoがこのアプリに必要なSQL文はどんなものかを確認するためのものである.実際にdatabase上で実行させるにはもう一度syncdbコマンドを実行すればよい.

python manage.py syncdb

APIで遊ぶ

Djangoのshellコマンドを実行するとDJANGO_SETTINGS_MODULE環境変数をセットした状態でpythonインタプリタを起動出来る.こうするとDjangoのディレクトリや自分で作成したアプリへのパスが通った状態となるので,コマンドラインで色々な動作チェックが可能となる.

python manage.py shell

どんなことが出来るかはドキュメントを参照のこと.