你已經建立第一個 Django 專案,那麼專案中有哪些東西呢?我們來看看 …
相關的組態設定該如何進行,我們還是實際從練習中瞭解 …
練習 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 預設的後台管理,就會使用到這個驗證系統,下圖是個示範:
接下來鍵入指令 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
這建立了兩個資料模型 Question
與 Choice
,Question
中有 question_text
與 pub_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
預覽一下:
如果沒有問題的話,就執行 python3.5 manage.py migrate
完成遷移:
接下來,就已經可以實際操作方才建立的 Question
與 Choice
了,相關的操作,都會自動與資料庫互動,像是作出變更或進行查詢,這之後我們再來介紹。