Django 串接資料庫與模型建構:完整入門指南
更新日期: 2024 年 11 月 23 日
本文為 Django 進階教學,第 3 篇:
- 理解 Django 中的相對路徑與絕對路徑
- Django URL 路徑設置|name 參數與命名空間(Namespace)
- Django 串接資料庫與模型建構:完整入門指南 👈 所在位置
- Django 模型遷移與資料庫同步完整指南
- 使用 Django ORM 將資料寫入資料庫:新手入門指南
- Django 實現 CRUD 的 C(Create):新增資料功能完整指南
- Django CRUD 的 R(Read):資料讀取與顯示功能指南
- Django CRUD 的 U(Update):資料更新功能完整指南
- Django CRUD 的 D(Delete):資料刪除功能完整指南
建議閱讀本文前,先閱讀完 Django 新手教學 系列文
在 Django 的 MTV 架構中,Model
負責與資料庫交互,處理數據的結構定義與邏輯操作。
本篇將以一個人力銀行網站的「新增履歷」功能為例,教你如何使用 Django 的模型系統建構資料結構,並串接資料庫。
項目目錄結構示意圖
以下是專案目錄結構,models.py
是我們操作的核心文件:
mysite/
│
├── manage.py
├── mysite/
│ ├── settings.py # 專案的配置文件
│ ├── urls.py # 主應用的路由
│
├── resumes/ # Resumes 應用
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py # 定義數據模型
│ ├── views.py # 定義業務邏輯
│ ├── migrations/ # 管理數據庫遷移的檔案
│ ├── templates/
│ ├── resumes/
│ ├── home.html # Resumes 應用首頁模板
models.py
文件位於 resumes
資料夾中,是用來定義與資料庫交互的核心文件。
Django 模型的基本概念
Django 的模型(Model)是應用與資料庫之間的橋樑,讓開發者不需要直接書寫繁瑣的 SQL 語法,也能快速完成資料的定義與操作。
模型的運作邏輯
以下是 Django 模型的基本操作流程:
- 視圖(Views)
用戶通過前端發送請求,視圖處理業務邏輯,並將請求傳遞給模型。 - 模型(Models)
模型將業務邏輯轉換為 SQL 語法,與資料庫進行交互。 - 資料庫(Database)
執行 SQL 語法,完成數據的存取或更新。
流程示意圖
前端請求 → 視圖 (Views) → 模型 (Models) → SQL 查詢 → 資料庫 (Database) → 返回結果
Django 的優勢
相比手動書寫 SQL 語法,Django 的模型系統提供以下優點:
- 自動生成 SQL:開發者只需定義模型屬性,Django 會自動生成對應的 SQL 語法,省去手動編寫的繁瑣工作。
- 可讀性強:模型使用 Python 描述欄位,更易於理解與維護。
- 跨資料庫支持:Django 可自動適配多種資料庫,降低切換成本。
建立 Resume 模型
接下來,我們將在 resumes/models.py
中新增一個名為 Resume
的模型,對應履歷功能的資料結構。
初始模型
from django.db import models
class Resume(models.Model):
pass
此模型中,我們創建了一個名為 Resume
的類,但尚未定義任何屬性。
定義資料表欄位
基本欄位
我們為 Resume
模型新增以下欄位:
title
:履歷的標題。skill
:應徵者的技能。content
:履歷的詳細內容。
模型代碼
class Resume(models.Model):
title = models.CharField()
skill = models.CharField()
content = models.TextField()
原理說明
這些欄位是通過 Django 提供的**描述器(Field Class)**定義的。
描述器的作用是將 Python 的屬性轉換為資料庫的欄位,並且讓我們能更靈活地定義欄位的屬性值。例如:
CharField
描述一個短文本欄位,對應資料庫中的VARCHAR
。TextField
描述一個長文本欄位,對應資料庫中的TEXT
。
模型中每個屬性都對應資料表中的一個欄位,並會被轉換為對應的 SQL 語法。
欄位屬性的進階設置
Django 提供多種選項來控制欄位的屬性,例如:
max_length
:限制文本欄位的最大字數。null
:是否允許該欄位為空。
進階模型代碼
class Resume(models.Model):
title = models.CharField(max_length=50) # 最多 50 字,必填
skill = models.CharField(max_length=50, null=True) # 最多 50 字,選填
content = models.TextField(null=True) # 選填
屬性詳解
max_length
:適用於CharField
,用於限制文本的最大長度,例如標題限制為 50 字。null=True
:允許欄位為空,適用於選填欄位;null=False
表示該欄位必填。
小結
通過本篇內容,我們學會了以下內容:
- Django 模型的作用與流程:模型負責與資料庫交互,並幫助我們省去手動編寫 SQL 的工作。
- 定義 Resume 模型:使用描述器新增欄位並定義屬性。
- 將模型同步到資料庫:透過
makemigrations
和migrate
命令自動生成資料表。
有了這些基礎後,接下來可以進一步結合視圖與模板,實現資料的存取與顯示功能!