Django的設計架構融合了傳統MVC(Model-View-Controller)的模式,構建出獨特的MTV(Model-Template-View)架構,今天就來簡介Django的核心架構以及其理念
MVC是一種經典的架構模式,將應用程序分成三個核心部分
Django雖然基於MVC理念,但是稍有不同,不論是命名還是各部件的功能
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]
負責HTML頁面的渲染,使用DTL語言
{% extends "base.html" %} # 繼承基礎模板
{% include "auth/login.html" %} # 可以複用其他模板
{{ article.title }} # 透過{{}}來顯示變數
{% if article.title %} {% endif %} # 有基本邏輯操作
View在Django中扮演著核心角色,負責處理request和返回response:
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渲染哪些數據
傳統MVC | Django MTV | 功能範疇 |
---|---|---|
Model | Model | 數據處理與部分業務邏輯 |
View | Template | 顯示介面 |
Controller | View | 業務邏輯與指定生成 |
Django的View承擔了更多的責任,不僅僅是協調Model和Template,還直接參與業務邏輯的處理。
總體來說兩者的核心想法是類似的,都是為了降低耦合以及提高可維護性,只是在具體的實現上有不同的做法
今天的內容簡單介紹了Django的MTV架構
明天會正式進入實作環節~再不寫code好像哪裡怪怪的