Django 的 MTV 架構與 startapp 指令全面解析

更新日期: 2024 年 12 月 1 日

Django 是一個基於 MTV 架構設計的 Web 框架,它簡化了 Web 開發的流程,使開發者能高效地構建功能強大的應用。

在本文中,我們將探討 Django 的 MTV 架構與經典的 MVC 模式的異同,並說明如何通過 startapp 指令快速創建 MTV 模式應用。


什麼是 MVC 與 MTV?

MVC(Model-View-Controller)是一種經典的設計模式,強調將應用程序的數據邏輯(Model)、業務邏輯(Controller)和展示邏輯(View)分離。

Django 基於 MVC 模式進行了一些調整,形成了自己的 MTV 架構。

MVC 架構

  • Model:負責數據邏輯和數據庫交互,定義應用的數據結構和業務邏輯。
  • View:負責數據的渲染與顯示,例如生成 HTML。
  • Controller:處理用戶請求,調用 Model,將數據傳遞給 View。

MTV 架構

Django 的 MTV 模式在命名和職責劃分上稍有不同:

  • Model:與 MVC 中的 Model 相同,負責定義數據結構和處理業務邏輯,使用 Django 的 ORM 簡化數據庫操作。
  • Template:負責渲染 HTML,專注於數據的顯示,取代了 MVC 中的 View。
  • View:處理用戶請求和業務邏輯,對應於 MVC 的 Controller。

MVC 與 MTV 對應關係

MVCDjango MTV功能
ModelModel定義數據結構,處理數據庫交互。
ViewTemplate負責數據渲染,生成用戶界面。
ControllerView處理用戶請求,調用 Model 和 Template。

為什麼 Django 採用 MTV 架構?

  1. 簡化角色分工
    Django 將界面生成的責任(如 HTML 渲染)從 View 分離,放入 Template 中,開發者能更直觀地進行前後端協作。
  2. 清晰的責任劃分
    • View:專注於處理業務邏輯,返回數據響應。
    • Template:專注於界面設計,負責數據展示。
  3. 快速開發
    MTV 模式專為 Web 開發設計,適合 Django 的快速開發理念。

startapp 指令與 MTV 的關係

startapp 是 Django 用於創建新應用的命令,它與 MTV 架構緊密相關,為每個應用提供了 MTV 所需的基本組件。

startapp 指令的作用

執行以下指令可以創建一個新的應用骨架:

python manage.py startapp <app_name>

創建後的目錄結構如下:

myproject/
├── manage.py
├── myproject/
   ├── settings.py
   ├── urls.py
   ├── ...
├── <app_name>/       # 使用 startapp 創建的應用
    ├── migrations/   # 管理數據庫遷移
    ├── admin.py      # 註冊管理後台
    ├── apps.py       # 配置應用
    ├── models.py     # 定義 Model
    ├── tests.py      # 測試代碼
    ├── views.py      # 定義 View
    ├── __init__.py

startapp 與 MTV 的對應

  • Model(models.py)
    負責數據結構的定義,例如數據表和邏輯操作:
    • 定義數據模型後,執行 makemigrationsmigrate,將模型同步到數據庫。
  • View(views.py)
    負責處理用戶請求、調用模型、返回響應:
    • 可使用函數視圖(FBV)或類型視圖(CBV)來實現。
  • Template
    雖然模板文件並未由 startapp 自動生成,但開發者可以在應用中創建 templates/<app_name>/ 資料夾,用於存放 HTML 模板。

使用 startapp 創建 MTV 架構應用

以下是通過 startapp 創建 MTV 應用的步驟。

創建應用並註冊

使用以下指令創建應用:

python manage.py startapp blog

將應用註冊到 settings.pyINSTALLED_APPS 中:

INSTALLED_APPS = [
    ...,
    'blog',
]

定義模型(Model)

blog/models.py 中定義數據結構:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

同步數據庫:

python manage.py makemigrations
python manage.py migrate

實現視圖(View)

blog/views.py 中定義視圖函數:

from django.shortcuts import render
from .models import Post

def post_list(request):
    posts = Post.objects.all()
    return render(request, 'blog/post_list.html', {'posts': posts})

配置路由(URL 配置)

在應用中創建 blog/urls.py

from django.urls import path
from .views import post_list

urlpatterns = [
    path('', post_list, name='post_list'),
]

在主應用的 urls.py 中引入:

from django.urls import path, include

urlpatterns = [
    path('blog/', include('blog.urls')),
]

設置模板(Template)

在應用內創建模板目錄 templates/blog/,並添加模板文件 post_list.html

<!DOCTYPE html>
<html>
<head>
    <title>Blog</title>
</head>
<body>
    <h1>Blog Posts</h1>
    <ul>
        {% for post in posts %}
            <li>{{ post.title }} - {{ post.created_at }}</li>
        {% endfor %}
    </ul>
</body>
</html>

小結

Django 的 MTV 架構與 startapp 指令為開發者提供了一個清晰、高效的開發範式:

  • MTV 架構 將數據處理(Model)、業務邏輯(View)和數據渲染(Template)分離,適合快速開發 Web 應用。
  • startapp 指令 幫助我們快速創建應用的骨架,提供 MTV 所需的基本組件。

通過 MTV 架構和 startapp 指令,Django 能幫助開發者高效地構建結構清晰、功能強大的應用!

Similar Posts