中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Django中實現MVT設計模式

發布時間:2021-04-29 15:45:50 來源:億速云 閱讀:165 作者:Leah 欄目:開發技術

怎么在Django中實現MVT設計模式?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

經典的MVC設計模式及其優點

MVC即 Model-View-Controller(模型-視圖-控制器) ,是經典的軟件開發設計模式。

  • **Model (模型) **: 簡而言之即數據模型。模型不是數據本身(比如數據庫里的數據),而是抽象的描述數據的構成和邏輯關系。通常模型包括了數據表的各個字段(比如人的年齡和出生日期)和相互關系(單對單,單對多關系等)。Web開發框架會根據模型的定義來自動生成數據表。

  • View (視圖): 主要用于顯示數據,用來展示用戶可以看到的內容或提供用戶可以輸入或操作的界面。數據來源于哪里?當然是數據庫啦。那么用戶輸入的數據給誰? 當然是給控制器啦。

  • Controller(控制器):應用程序中處理用戶交互的部分。通常控制器負責從視圖讀取數據,控制用戶輸入,并向模型發送數據(比如增加或更新數據表)。

如果把MVC比喻成一個粽子,那么View就是最外面一層的綠色玉米葉,是吃貨們可以直接看到的。Controller就是中間那層熟糯米,而粽子的核心自然是最里面那一層的肉餡Model模型了。現在大家知道中學和大學數學建模的重要性了吧?

MVC最大的優點是實現了軟件或網絡應用開發過程中數據、業務邏輯和用戶界面的分離,使軟件開發更清晰,也是維護變得更容易。這與靜態網頁設計中使用html和css實現了內容和樣式的分離是同一個道理。

Django是如何遵循MVC設計模式的?

Django的MVT設計模式由Model(模型), View(視圖) 和Template(模板)三部分組成,分別對應單個app目錄下的models.py, views.py和templates文件夾。它們看似與MVC設計模式不太一致,其實本質是相同的。Django的MVT設計模式與經典的MVC對應關系如下。

  • Django Model(模型): 這個與經典MVC模式下的模型Model差不多。

  • Django View(視圖): 這個與MVC下的控制器Controller更像。視圖不僅負責根據用戶請求從數據庫讀取數據、指定向用戶展示數據的方式(網頁或json數據), 還可以指定渲染模板并處理用戶提交的數據。

  • Django Template(模板): 這個與經典MVC模式下的視圖View一致。模板用來呈現Django view傳來的數據,也決定了用戶界面的外觀。Template里面也包含了表單,可以用來搜集用戶的輸入內容。

Django MVT設計模式中最重要的是視圖(view), 因為它同時與模型(model)和模板(templates)進行交互。當用戶發來一個請求(request)時,Django會對請求頭信息進行解析,解析出用戶需要訪問的url地址,然后根據路由urls.py中的定義的對應關系把請求轉發到相應的視圖處理。視圖會從數據庫讀取需要的數據,指定渲染模板,最后返回響應數據。這個過程如下圖所示:

怎么在Django中實現MVT設計模式

示例

現在我們以示例演示Django的MVT三部分是如何工作的。

新建app并注冊

假如你有一個mysite項目,希望新增一個任務管理小應用,你首先要使用python manage.py startapp tasks的命令創建一個名為tasks的app,將它加入到settings.py中的INSTALLED_APP中去。

# mysite/settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'tasks',
]

然后把tasks應用的urls添加到到項目的urls中去。

# mysite/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('tasks/', include('tasks.urls'))
]

創建模型(M)

編輯tasks目錄下models.py創建Task模型, Task模型包含里名稱name和狀態status兩個字段。當你使用python manage.py makemigrations和python manage.py migrate命令時,Django會自動為你在數據庫創建數據表(默認使用的數據庫是免費的sqlite),表名為tasks_task。

# tasks/models.py
    
    from django.db import models
    
    class Status(models.TextChoices):
        UNSTARTED = 'u', "Not started yet"
        ONGOING = 'o', "Ongoing"
        FINISHED = 'f', "Finished"
    
    # Task模型
    class Task(models.Model):
        name = models.CharField(verbose_name="Task name", max_length=65, unique=True)
        status = models.CharField(verbose_name="Task status", max_length=1, choices=Status.choices)
    
        def __str__(self):
            return self.name

編寫視圖并配置路由URL(V)

接下來我們要編輯視圖views.py,并新增一個視圖函數 task_list, 用于展示任務清單。該視圖函數從數據庫讀取了Task對象列表,指定了渲染模板并向模板傳遞了數據。

# tasks/views.py
from django.shortcuts import render
from .models import Task

# 任務清單
def task_list(request):
    # 從數據庫獲取Task對象列表
    tasks = Task.objects.all()
    # 指定渲染模板并向模板傳遞數據
    return render(request, "tasks/task_list.html", { "tasks": tasks,})

光編寫視圖(views.py)還不夠,我們還得為寫好的視圖函數配置路由,這樣才能將視圖函數與用戶的請求地址建立好對應關系。編輯或創建tasks/urls.py, 添加如下代碼:

這樣當用戶訪問/tasks/時,Django將調用task_list視圖函數。這個視圖函數將同時與數據庫和模板進行交互。

編輯模板(T)

最后我們要創建task_list.html用于展示視圖傳來的任務列表數據。這個文件的完整路徑為tasks/templates/tasks/task_list.html。至于模板為什么放這里,我們后續會專門介紹。Django還提供了自己的模板語言,包括常見的判斷和循環,專門用來渲染模板。

# tasks/templates/tasks/task_list.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Task List</title>
</head>
<body>
<h4>Task List</h4>
{% for task in tasks %}
    <p>{{ forloop.counter }}. {{ task.name }} - {{ task.get_status_display }}
    </p>
{% endfor %}
</body>
</html>

當然此時如果你通過瀏覽器訪問/tasks/, 還看不到任何內容,這是因為你的數據表里還沒有任何數據。你可以通過django的admin添加或新增task_create視圖實現。

關于怎么在Django中實現MVT設計模式問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

化隆| 政和县| 都江堰市| 曲周县| 岳阳市| 睢宁县| 鲁山县| 永顺县| 陆河县| 信宜市| 密山市| 壶关县| 靖州| 巩义市| 沽源县| 陆良县| 鹤峰县| 屏山县| 长兴县| 宝兴县| 临漳县| 钟祥市| 拉孜县| 临汾市| 砀山县| 贡嘎县| 舟曲县| 涿州市| 辽阳市| 常熟市| 霞浦县| 淮阳县| 临高县| 吴桥县| 永泰县| 林甸县| 中超| 土默特左旗| 虹口区| 麦盖提县| 神池县|