iT邦幫忙

2024 iThome 鐵人賽

DAY 2
0
Software Development

Django 2024: 從入門到SaaS實戰系列 第 3

Django in 2024: Django架構深度解析

  • 分享至 

  • xImage
  •  

Django的設計架構融合了傳統MVC(Model-View-Controller)的模式,構建出獨特的MTV(Model-Template-View)架構,今天就來簡介Django的核心架構以及其理念

MVC模式簡介

MVC是一種經典的架構模式,將應用程序分成三個核心部分

  • Model(模型):負責數據與處理資料相關的邏輯
  • View(視圖):負責數據的展示和用戶界面,依照Controller的指示呈現來自Model的資料
  • Controller(控制器):協調Model和View,根據使用者的需求處理資料內容以及設定要呈現的資料

Django的MTV架構

Django雖然基於MVC理念,但是稍有不同,不論是命名還是各部件的功能

  • Model(模型):與MVC中的M相似,都是處理數據與部分邏輯
  • Template(模板):對應MVC的V,主要負責數據展示
  • View(視圖):類似Controller但是更注重處理業務邏輯,在適當的時候調用Model與Template

Model

Django的Model透過ORM(對象關係映射)來實現

  • 定義數據結構和字段類型
  • 處理數據庫查詢
  • 實現業務邏輯和數據驗證
from django.db import models

class Article(models.Model):
		# 定義數據結構與欄位類型
    title = models.CharField(max_length=200)
    content = models.TextField()
    published_date = models.DateTimeField(default=timezone.now)
    views = models.PositiveIntegerField(default=0)
    
    def clean(self):
        # 數據驗證
        if self.title.lower() == 'test':
            raise ValidationError('文章標題不能為"test"。')
    
    @classmethod
    def get_most_viewed(cls, limit=5):
        # 處理數據庫查詢
        return cls.objects.filter(status='published').order_by('-views')[:limit]

Template

負責HTML頁面的渲染,使用DTL語言

  • 展示View傳遞過來的數據
  • 可以支援基本的邏輯操作
  • 有繼承與複用的功能
{% extends "base.html" %} # 繼承基礎模板
{% include "auth/login.html" %} # 可以複用其他模板
{{ article.title }} # 透過{{}}來顯示變數
{% if article.title %} {% endif %} # 有基本邏輯操作

View

View在Django中扮演著核心角色,負責處理request和返回response:

  • 接收請求
  • 與Model交互,獲取或處理數據
  • 渲染Template,或直接返回JSON等數據結構
from django.shortcuts import render
from .models import Article

def article_detail(request, article_id): # 接收request
    article = Article.objects.get(id=article_id) # 調用model
    return render(request, 'article_detail.html', {'article': article}) 
    # 在指定的template渲染哪些數據

Django MTV與MVC的對比

傳統MVC Django MTV 功能範疇
Model Model 數據處理與部分業務邏輯
View Template 顯示介面
Controller View 業務邏輯與指定生成

Django的View承擔了更多的責任,不僅僅是協調Model和Template,還直接參與業務邏輯的處理。
總體來說兩者的核心想法是類似的,都是為了降低耦合以及提高可維護性,只是在具體的實現上有不同的做法

今天的內容簡單介紹了Django的MTV架構
明天會正式進入實作環節~再不寫code好像哪裡怪怪的


上一篇
Django in 2024: Web開發的全能選手
下一篇
Django in 2024: 總是得從這裡開始,Hello world!第一個Django專案
系列文
Django 2024: 從入門到SaaS實戰31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言