Python 3 Tutorial 第八堂(2)建立 App 與模型


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

建立 App 與模型

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

練習 13:建立 App 與模型

在專案資料夾中,有看到 db.sqlite3 資料庫檔案,存放的位置可在 mysite/settings.py 中 DATABASES'default' 項目中設定,其中 'ENGINE' 設定為 'django.db.backends.sqlite3',表示使用 Sqlite3,如果想要設定為其他資料庫系統,可以改為像是 'django.db.backends.postgresql''django.db.backends.mysql''django.db.backends.oracle' 等值。

'NAME' 可用來設定想要的資料庫檔案位置,預設值是 os.path.join(BASE_DIR, 'db.sqlite3'),表示儲存在專案目錄之下:

...
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}  
...

接著執行 python3.5 manage.py migrate,你就會看到一些建構資料表格的過程,然後會建立一個預設的驗證系統,如果你想要使用 Django 預設的後台管理,就會使用到這個驗證系統,下圖是個示範:

建立 App 與模型

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

from django.db import models

class Question(models.Model):
    question_text = 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 __str__(self):
        return self.question_text

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

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

這個 app 剛建立,你必須讓目前專案知道,這要在 mysite/settings.py 中設定,找到其中的 'INSTALLED_APPS',在最後加入 'polls'

...
# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls'
]
...

接著你可以執行 python3.5 manage.py makemigrations polls,你會看到以下的訊息:

Migrations for 'polls':
  0001_initial.py:
    - Create model Choice
    - Create model Question
    - Add field question to choice

makemigrations 告訴 Django 模型有所變動,這會建立一個遷移(migration)檔案,像是方才建立的 0001_initial.py,當中載明了如何對資料庫作出變更,如果想知道接下來會執行哪些 SQL,可以執行 python3.5 manage.py sqlmigrate polls 0001 預覽一下:

建立 App 與模型

如果沒有問題的話,就執行 python3.5 manage.py migrate 完成遷移:

建立 App 與模型

接下來,就已經可以實際操作方才建立的 QuestionChoice 了,相關的操作,都會自動與資料庫互動,像是作出變更或進行查詢,這之後我們再來介紹。