Django 串接資料庫與模型建構:完整入門指南

更新日期: 2024 年 11 月 23 日

在 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 模型的基本操作流程:

  1. 視圖(Views)
    用戶通過前端發送請求,視圖處理業務邏輯,並將請求傳遞給模型。
  2. 模型(Models)
    模型將業務邏輯轉換為 SQL 語法,與資料庫進行交互。
  3. 資料庫(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 表示該欄位必填。

小結

通過本篇內容,我們學會了以下內容:

  1. Django 模型的作用與流程:模型負責與資料庫交互,並幫助我們省去手動編寫 SQL 的工作。
  2. 定義 Resume 模型:使用描述器新增欄位並定義屬性。
  3. 將模型同步到資料庫:透過 makemigrationsmigrate 命令自動生成資料表。

有了這些基礎後,接下來可以進一步結合視圖與模板,實現資料的存取與顯示功能!

Similar Posts