Python 2 Tutorial 第四堂(2)建立 App 與基本 ORM




你已經建立第一個 Django 專案,那麼專案中有哪些東西呢?我們來看看 ...

python-tutorial-the-4th-class-2-1


相關的組態設定該如何進行,我們還是實際從練習中瞭解 …

練習 10:建立資料庫與 App


開啟 mysite/settings.py,將其中 DATABASES'default' 項目中,'ENGINE' 設定為 'django.db.backends.sqlite3''NAME' 設定為你想要的資料庫檔案位置,例如 '/home/caterpillar/scripts/venv/mysite/db.sqlite3'
...
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', 
        'NAME': '/home/caterpillar/scripts/venv/mysite/db.sqlite3',                      
        'USER': '',
        'PASSWORD': '',
        'HOST': '',                     
        'PORT': '',                    
    }
}
...

接著執行 python manage.py syncdb,你就會看到一些建構資料表格的過程,然後會建立一個預設的驗證系統,如果你想要使用 Django 預設的後台管理,就會使用到這個驗證系統,你可以輸入使用者名稱、郵件、密碼等,下圖是個示範:

python-tutorial-the-4th-class-2-2


接下來鍵入指令 python manage.py startapp polls 建立一個簡單的 poll app,這是一個用來作問題投票用的簡單 app;然後編輯 polls/models.py 的內容如下:
from django.db import models

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

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

    def __unicode__(self):
        return self.question

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

    def __unicode__(self):
        return self.choice_text


這建立了兩個資料模型 PollChoicePoll 中有 questionpub_date 兩個欄位,代表想問題描述與發佈日期,was_published_recently 方法用來判斷,這個問題是不是最近一日內新發佈的,__unicode__ 用來傳回 Poll 實例的字串說明。Choice 則用來記錄投票選項,poll 關聯至問題(Poll 實例),choice_text 是該問題的選項文字,votes 是投票數。

這個 app 剛建立,你必須讓目前專案知道,這要在 mysite/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'
)

接著你可以分別執行 python manage.py sql polls 預覽將執行的 SQL,以及 python manage.py syncdb 指令進行資料庫同步,執行時的參考畫面如下:

python-tutorial-the-4th-class-2-3


接著你可以鍵入 python manage.py shell 指令,這會設定 DJANGO_SETTINGS_MODULE 環境變數,讓你可以取用 Django 的 Python 模組,然後進入 Python 互動環境,你可以在當中體驗一些 API 的使用,這些 API 是在先前的幾個動作中已經產生的,例如來玩一下 Poll 實例建立想調查的問題:

python-tutorial-the-4th-class-2-4


或者是建立 ChoicePoll 的一對一關係:

python-tutorial-the-4th-class-2-5


PollChoice 的操作,其實都會由 Django 進行一些物件關係對應(Object-Relational Mapping, ORM),也就是相關狀態,在某些操作時,都會同步至資料庫。 接下來,是該進行頁面設計了,這在下篇再來談了 ...