iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 12
1
Modern Web

🍐放學後的網頁開發系列 第 12

[Day12] 柚子放學後的網頁生活 - Django Model

昨天我們學會建立靜態網頁與檔案放置,並成功用view顯示後,今天來了解後端囉!

進入 Model 世界

先說說 Model 有什麼好處呢
資料庫轉換相當方便。Django用的後端資料庫系統為 SQLite ,我們可以用SQLite輕易轉換到熟悉的 MySQL、或是昂貴的 Oracle 等

那我們先找找Database相關操作在哪裡 ?

# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases

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

我們可以在settings.py看到這幾段Database的default

  • Engine : 表示你使用的資料庫Engine,像這邊是sqlite3
  • Name : 你的資料庫名稱,預設是在目錄下的db.sqlite3

這邊再為大家做個小提醒
如果原本django安裝是用venv安裝的,要記得run起來哦

django_venv\Scripts\activate

有成功看到小括號在前面才是開啟成功

接著再執行

python manage.py runserver

才會run起來哦,之前我就常常耍笨忘記開venv,希望大家記得啦

Django Models

知道Models的用途後,我們就直接來看看Models的設定
Models 放置於 classes/models.py
我們引用在第一課時介紹ORM的那段

class Teacher(models.Model):
    name = models.CharField(max_length=20)
    yrsold = models.DecimalField(max_digits=3,decimal_places=0)
    skills = models.CharField(max_length=50, blank=True)

我們給了Teacher這個 model 三個屬性有name, yrsold, skills 來記錄每個老師

Col name Field type Explain
姓名 (name) CharField max_length=20 (長度限為20)
年齡 (yrsold) DecimalField max_digits=3,decimal_places=0
專長 (skills) CharField max_length=50, blank=True

DecimalField 的參數為

  • DecimalField.max_digits:允許的最大位數
  • DecimalField.decimal_places:小數的最大位數
    那年齡不可能有小數點,故我的decimal_places = 0

blank = True表示這格可以為NULL
有些老師不一定有專長,但有教育熱忱,那就別要求吧!

若對其他Field type想更了解的話這邊有說明https://www.webforefront.com/django/modeldatatypesandvalidation.html

更新Database

那我們在settings.py撰寫完成後,也要真的執行Database
那此時我們回到 Command Line 做一個 migrate的準備

其實這是代表什麼意思呢?

依照Model的修改刪除建立一個新的migration記錄檔案

python manage.py makemigrations

咦? 怎麼會no change detected呢 ?

  • 可能你沒存到剛設定的settings
  • 可能你走錯folder

如果成功的話,登愣 !


就會看到顯示create model Teacher,我們的model成功建立了
但這樣結束了嗎?

我們建立了這model,但還要真正的migrate上去,更新DB中的資料表

python manage.py migrate

如果沒有出錯的話,可以看到Apply ok的reply就代表成功囉

確認建立成功後,可以回到目錄下會發現多一個migrations的資料夾,裡面0001_initial.py被加進來囉

那下一章就要開始和大家分享怎麼藉由ORM來操作DB~~

最後檢視今天學會了什麼

  • 了解Database在settings.py裡的操作
  • 成功建立Model並migrate成功

下課囉 ~ 請鎖定 柚子放學後的網頁生活


上一篇
[Day11]柚子放學後的網頁生活 - Django Template
下一篇
[Day13] 柚子放學後的網頁生活 - Django Create/Read
系列文
🍐放學後的網頁開發30

尚未有邦友留言

立即登入留言