亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:2日期:2024-09-09 10:35:11
經(jīng)典的MVC設(shè)計(jì)模式及其優(yōu)點(diǎn)

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

**Model (模型) **: 簡(jiǎn)而言之即數(shù)據(jù)模型。模型不是數(shù)據(jù)本身(比如數(shù)據(jù)庫里的數(shù)據(jù)),而是抽象的描述數(shù)據(jù)的構(gòu)成和邏輯關(guān)系。通常模型包括了數(shù)據(jù)表的各個(gè)字段(比如人的年齡和出生日期)和相互關(guān)系(單對(duì)單,單對(duì)多關(guān)系等)。Web開發(fā)框架會(huì)根據(jù)模型的定義來自動(dòng)生成數(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比喻成一個(gè)粽子,那么View就是最外面一層的綠色玉米葉,是吃貨們可以直接看到的。Controller就是中間那層熟糯米,而粽子的核心自然是最里面那一層的肉餡Model模型了。現(xiàn)在大家知道中學(xué)和大學(xué)數(shù)學(xué)建模的重要性了吧?

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

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

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

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

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

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

示例

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

新建app并注冊(cè)

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

# mysite/settings.pyINSTALLED_APPS = [ ’django.contrib.admin’, ’django.contrib.auth’, ’django.contrib.contenttypes’, ’django.contrib.sessions’, ’django.contrib.messages’, ’django.contrib.staticfiles’, ’tasks’,]

然后把tasks應(yīng)用的urls添加到到項(xiàng)目的urls中去。

# mysite/urls.pyfrom django.contrib import adminfrom django.urls import path, includeurlpatterns = [ path(’admin/’, admin.site.urls), path(’tasks/’, include(’tasks.urls’))]創(chuàng)建模型(M)

編輯tasks目錄下models.py創(chuàng)建Task模型, Task模型包含里名稱name和狀態(tài)status兩個(gè)字段。當(dāng)你使用python manage.py makemigrations和python manage.py migrate命令時(shí),Django會(huì)自動(dòng)為你在數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)表(默認(rèn)使用的數(shù)據(jù)庫是免費(fèi)的sqlite),表名為tasks_task。

# tasks/models.pyfrom django.db import modelsclass 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,并新增一個(gè)視圖函數(shù) task_list, 用于展示任務(wù)清單。該視圖函數(shù)從數(shù)據(jù)庫讀取了Task對(duì)象列表,指定了渲染模板并向模板傳遞了數(shù)據(jù)。

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

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

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

編輯模板(T)

最后我們要?jiǎng)?chuàng)建task_list.html用于展示視圖傳來的任務(wù)列表數(shù)據(jù)。這個(gè)文件的完整路徑為tasks/templates/tasks/task_list.html。至于模板為什么放這里,我們后續(xù)會(huì)專門介紹。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)然此時(shí)如果你通過瀏覽器訪問/tasks/, 還看不到任何內(nèi)容,這是因?yàn)槟愕臄?shù)據(jù)表里還沒有任何數(shù)據(jù)。你可以通過django的admin添加或新增task_create視圖實(shí)現(xiàn)。

小結(jié)

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

以上就是詳解Django的MVT設(shè)計(jì)模式的詳細(xì)內(nèi)容,更多關(guān)于Django的MVT設(shè)計(jì)模式的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 天天看天天摸色天天综合网 | 伊人伊狠亚洲综合影院 | 一级黄色录像大片 | 国产日韩欧美视频 | 国产欧美精品国产国产专区 | 日韩黄色精品 | 成人免费网站 | 在线观看av网站永久 | 亚洲国产精 | 国产福利视频 | 亚洲欧美专区精品伊人久久 | 最新国语露脸精品国产 | 欧美色就色 | 鸥美肥妇特级毛片视频 | 91福利一区二区 | 亚洲一区毛片 | 欧美真人视频一级毛片 | 日韩中文字幕精品一区在线 | 亚洲综合欧美 | 亚洲制服在线观看 | 一级毛片特级毛片国产 | 91高清视频在线观看 | 亚洲欧美日韩国产专区一区 | 国产亚洲精品久久麻豆 | 成人午夜亚洲影视在线观看 | 乱一色一一区二区三区 | 在线播放成人毛片免费视 | 日本免费人成黄页网观看视频 | 亚洲人成在线免费观看 | 成人精品视频网站 | 在线观看亚洲精品专区 | 日本黄色免费观看 | 国产51| 美女翘臀白浆直流视频 | 韩国深夜福利视频19禁在线观看 | 日本一级毛片免费播放 | 亚洲精品日本一区二区在线 | 国产淫语对白在线视频 | 成人a区| 国产手机在线αⅴ片无码观看 | 国产成人精品第一区二区 |