婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解Django的MVT設(shè)計模式

詳解Django的MVT設(shè)計模式

熱門標(biāo)簽:遼寧400電話辦理多少錢 幫人做地圖標(biāo)注收費算詐騙嗎 荊州云電銷機器人供應(yīng)商 蘇州電銷機器人十大排行榜 江蘇房產(chǎn)電銷機器人廠家 悟空智電銷機器人6 外呼不封號系統(tǒng) 溫州旅游地圖標(biāo)注 電信營業(yè)廳400電話申請

經(jīng)典的MVC設(shè)計模式及其優(yōu)點

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

  • **Model (模型) **: 簡而言之即數(shù)據(jù)模型。模型不是數(shù)據(jù)本身(比如數(shù)據(jù)庫里的數(shù)據(jù)),而是抽象的描述數(shù)據(jù)的構(gòu)成和邏輯關(guān)系。通常模型包括了數(shù)據(jù)表的各個字段(比如人的年齡和出生日期)和相互關(guān)系(單對單,單對多關(guān)系等)。Web開發(fā)框架會根據(jù)模型的定義來自動生成數(shù)據(jù)表。
  • View (視圖): 主要用于顯示數(shù)據(jù),用來展示用戶可以看到的內(nèi)容或提供用戶可以輸入或操作的界面。數(shù)據(jù)來源于哪里?當(dāng)然是數(shù)據(jù)庫啦。那么用戶輸入的數(shù)據(jù)給誰? 當(dāng)然是給控制器啦。
  • Controller(控制器):應(yīng)用程序中處理用戶交互的部分。通常控制器負(fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)(比如增加或更新數(shù)據(jù)表)。

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

MVC最大的優(yōu)點是實現(xiàn)了軟件或網(wǎng)絡(luò)應(yīng)用開發(fā)過程中數(shù)據(jù)、業(yè)務(wù)邏輯和用戶界面的分離,使軟件開發(fā)更清晰,也是維護變得更容易。這與靜態(tài)網(wǎng)頁設(shè)計中使用html和css實現(xiàn)了內(nèi)容和樣式的分離是同一個道理。

Django是如何遵循MVC設(shè)計模式的?

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

  • Django Model(模型): 這個與經(jīng)典MVC模式下的模型Model差不多。
  • Django View(視圖): 這個與MVC下的控制器Controller更像。視圖不僅負(fù)責(zé)根據(jù)用戶請求從數(shù)據(jù)庫讀取數(shù)據(jù)、指定向用戶展示數(shù)據(jù)的方式(網(wǎng)頁或json數(shù)據(jù)), 還可以指定渲染模板并處理用戶提交的數(shù)據(jù)。
  • Django Template(模板): 這個與經(jīng)典MVC模式下的視圖View一致。模板用來呈現(xiàn)Django view傳來的數(shù)據(jù),也決定了用戶界面的外觀。Template里面也包含了表單,可以用來搜集用戶的輸入內(nèi)容。

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

示例

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

新建app并注冊

假如你有一個mysite項目,希望新增一個任務(wù)管理小應(yīng)用,你首先要使用python manage.py startapp tasks的命令創(chuàng)建一個名為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應(yīng)用的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'))
]

創(chuàng)建模型(M)

編輯tasks目錄下models.py創(chuàng)建Task模型, Task模型包含里名稱name和狀態(tài)status兩個字段。當(dāng)你使用python manage.py makemigrations和python manage.py migrate命令時,Django會自動為你在數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)表(默認(rèn)使用的數(shù)據(jù)庫是免費的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,并新增一個視圖函數(shù) task_list, 用于展示任務(wù)清單。該視圖函數(shù)從數(shù)據(jù)庫讀取了Task對象列表,指定了渲染模板并向模板傳遞了數(shù)據(jù)。

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

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

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

這樣當(dāng)用戶訪問/tasks/時,Django將調(diào)用task_list視圖函數(shù)。這個視圖函數(shù)將同時與數(shù)據(jù)庫和模板進行交互。

編輯模板(T)

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

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

當(dāng)然此時如果你通過瀏覽器訪問/tasks/, 還看不到任何內(nèi)容,這是因為你的數(shù)據(jù)表里還沒有任何數(shù)據(jù)。你可以通過django的admin添加或新增task_create視圖實現(xiàn)。

小結(jié)

Django的MVT設(shè)計模式也遵循了軟件設(shè)計經(jīng)典的MVC設(shè)計模式。事實上我們在日常Django項目開發(fā)過程中一般也是先編寫M,再編寫V,最后才寫T。

以上就是詳解Django的MVT設(shè)計模式的詳細(xì)內(nèi)容,更多關(guān)于Django的MVT設(shè)計模式的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 詳解用Go語言實現(xiàn)工廠模式(Golang經(jīng)典編程案例)
  • 如何使用django的MTV開發(fā)模式返回一個網(wǎng)頁
  • 淺談django三種緩存模式的使用及注意點
  • 淺談django開發(fā)者模式中的autoreload是如何實現(xiàn)的
  • go語言單例模式(Singleton)實例分析
  • Go語言設(shè)計模式之結(jié)構(gòu)型模式

標(biāo)簽:欽州 景德鎮(zhèn) 三沙 宿遷 黃山 濟南 臺灣 喀什

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Django的MVT設(shè)計模式》,本文關(guān)鍵詞  詳解,Django,的,MVT,設(shè)計模式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解Django的MVT設(shè)計模式》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解Django的MVT設(shè)計模式的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲欧美另类小说视频| 欧美日韩国产精品成人| 国产精品日韩精品欧美在线| 欧日韩精品视频| www.性欧美| 成人高清伦理免费影院在线观看| 免费在线一区观看| 日韩精品1区2区3区| 亚洲国产精品人人做人人爽| 国产精品不卡在线观看| 中文字幕不卡在线| 欧美国产一区在线| 国产欧美日韩精品在线| 久久夜色精品国产噜噜av| 日韩欧美123| 日韩欧美国产小视频| 日韩区在线观看| 欧美大肚乱孕交hd孕妇| 精品少妇一区二区三区视频免付费| 欧美专区亚洲专区| 欧美日韩中文另类| 91麻豆精品国产综合久久久久久| 欧美视频一区二区三区| 91精品欧美一区二区三区综合在| 91精品在线麻豆| 精品久久久久一区二区国产| 精品国产精品一区二区夜夜嗨| 日韩精品一区二区在线| 2020国产精品| 国产精品久久久久天堂| 亚洲精品国产一区二区三区四区在线 | 成人a免费在线看| 成av人片一区二区| 97se亚洲国产综合在线| 蜜桃av噜噜一区二区三区小说| 亚洲一卡二卡三卡四卡五卡| 亚洲免费观看视频| 婷婷国产在线综合| 久久99久久久欧美国产| 国产99精品在线观看| gogogo免费视频观看亚洲一| 在线亚洲一区二区| 欧美一级生活片| 国产免费久久精品| 亚洲黄色性网站| 日本v片在线高清不卡在线观看| 久99久精品视频免费观看| 粉嫩av一区二区三区在线播放| 色综合咪咪久久| 欧美一区二区三区视频免费 | 丝袜亚洲另类欧美综合| 久久69国产一区二区蜜臀| a级高清视频欧美日韩| 欧美美女激情18p| 国产精品无人区| 日韩成人av影视| 99精品桃花视频在线观看| 欧美一区二区视频在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 香蕉av福利精品导航| 成人av在线观| 久久久亚洲午夜电影| 亚洲国产精品久久人人爱蜜臀| 国产成人在线色| 精品剧情v国产在线观看在线| 一区二区不卡在线视频 午夜欧美不卡在| 精品亚洲国产成人av制服丝袜| 在线观看av一区二区| 国产精品三级电影| 国内精品写真在线观看| 7777女厕盗摄久久久| 日韩中文字幕av电影| 亚洲gay无套男同| 高清不卡在线观看| 在线不卡免费欧美| 亚洲图片另类小说| 国产91精品在线观看| 精品国产精品网麻豆系列 | 亚洲一区免费视频| 成人国产精品免费网站| 久久毛片高清国产| 日韩精品一二三区| 欧美性xxxxxxxx| 一区二区三区中文免费| 91在线一区二区三区| 中文字幕成人网| 成人av午夜影院| 国产精品每日更新在线播放网址| 久久国产精品无码网站| 91麻豆精品国产91久久久使用方法 | 亚洲无人区一区| 精品午夜久久福利影院 | 亚洲第一久久影院| 色综合天天综合给合国产| 国产精品丝袜黑色高跟| 极品少妇一区二区三区精品视频| 日韩一区二区三区视频在线 | 国产精品污网站| www.在线欧美| 久久久精品日韩欧美| 亚洲成a天堂v人片| 欧美伊人久久久久久久久影院| 国产精品亲子乱子伦xxxx裸| 国产成人精品免费一区二区| 国产欧美日产一区| 成人免费观看视频| 亚洲人成在线播放网站岛国 | 国产一区二区在线免费观看| 欧美xxxxxxxxx| 国产乱码精品一区二区三区忘忧草| 精品国产乱码久久久久久影片| 国内不卡的二区三区中文字幕| 久久久久综合网| 99久久精品免费看国产免费软件| 一个色在线综合| 91麻豆精品国产91| 国产乱理伦片在线观看夜一区| 久久蜜桃av一区二区天堂| 蜜桃一区二区三区在线| 9191精品国产综合久久久久久| 日韩不卡一二三区| 精品精品国产高清一毛片一天堂| 国产黄人亚洲片| 亚洲三级久久久| 欧美美女一区二区在线观看| 日本sm残虐另类| 国产精品日韩成人| 欧美剧情片在线观看| 国产高清精品在线| ...xxx性欧美| 欧美不卡一区二区| 9色porny自拍视频一区二区| 首页国产欧美久久| 欧美国产1区2区| 欧美人牲a欧美精品| 国产.欧美.日韩| 午夜电影一区二区| 国产精品免费aⅴ片在线观看| 欧美男男青年gay1069videost| 久久精品国产久精国产| 欧美第一区第二区| 成人av在线影院| 舔着乳尖日韩一区| **性色生活片久久毛片| 精品电影一区二区三区| 欧美三级日韩三级国产三级| 国产黄色精品网站| 午夜精品久久久久| 《视频一区视频二区| 精品粉嫩超白一线天av| 欧美精品久久一区| 在线观看91精品国产入口| 成人激情文学综合网| 久久99久久久久| 亚洲国产视频a| 亚洲免费在线电影| 国产精品欧美极品| 久久网站最新地址| 精品久久久久久最新网址| 在线电影一区二区三区| 欧美色区777第一页| 久久99精品久久久久久国产越南| 色香蕉成人二区免费| 精东粉嫩av免费一区二区三区| 亚洲日本电影在线| 日本一区二区三级电影在线观看 | aaa亚洲精品| 国产91精品在线观看| 国产一区二区美女| 国产露脸91国语对白| 激情五月婷婷综合网| 国内精品第一页| 国产在线精品一区二区不卡了| 麻豆精品在线看| 美女精品自拍一二三四| 日本一区中文字幕| 免费视频一区二区| 久久精品国产久精国产爱| 久草在线在线精品观看| 国产一区二区三区av电影| 国产美女精品在线| 成人综合在线网站| 亚洲国产婷婷综合在线精品| 亚洲精品写真福利| 夜夜夜精品看看| 日韩成人av影视| 免费av成人在线| 久久不见久久见免费视频1| 久久国产夜色精品鲁鲁99| 国产在线视频不卡二| 丰满放荡岳乱妇91ww| 97久久超碰国产精品电影| 色哟哟国产精品| 欧美日韩大陆一区二区| 日韩精品一区二区三区视频在线观看 | 天堂一区二区在线| 日韩精品午夜视频| 国产一区二区三区久久久| 成人av网在线| 在线精品视频小说1|