Django的MVT模式与MVC模式
Django的MVT模式与MVC模式
在正式开始coding之前,我觉得有必要探讨下Django的MVT模式,理论和实践相结合,才能更好的掌握一门技术。Django中的MVT模式,Django就是属于MVC模式。MVC(Model-View-Controller)模型-视图-控制器,MVC是一种 软件框架模式,最开始用于Desktop程序开发,现在已被广泛使用,包括Web开发,MVT(Model-View- Template),Django内部的URLconf作为控制器的角色,负责了接收用户请求和转发请求的工作,Django 里更关注的是模型(Model)、模板(Template)和视图(Views),故称之为 Django MVT 模式。
介绍MVT:
M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。
Django中MVT的设计是遵守 MVC的流程去执行。
MVT即模型-模版-视图模式,其标准名称是有争议的。在MVC的解释中,视图描述了展现给用户的数据,是指所看到的数据,而不是如何看见它。在python中视图是指对某一特定URL的回调函数,因为回调函数描述了所要展现的数据。模版用于将内容与展现分离。在django中,视图描述了要展现的数据,而视图一般转交给模版。模版描述了数据如何展现,控制器则是指django框架本身,通过URL配置,系统将一个请求发送到一个合适的视图。
MVT执行顺序
设计模式: 核心思想是分工,解耦,让不同的代码之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容
1,客户端发出请求,与关系型数据库进行交互
2,路由接收请求,根据请求地址查找视图
3,视图接收,处理 找到相应的Model(数据交互)
4, 与关系型数据库进行交互 取得数据
5,将取到的数据返回给Model
6,将数据交给view进行处理
7,将数据套入到需要的template,封装相对应的html,css,js编写的模板语言
8,将封装好的模板语言返回给view进行处理
9,客户端接受结果进行渲染html和css 执行js
MVT基于MVC,所以流程与MVC十分相似,客户端发送请求,根据请求地址去寻找视图,视图把接收并处理请求,访问数据库,提取数据,由视图返回结果到模板上,客户端接收渲染
MVT详解图


MVT的处理过程: Django框架接收了用户请求和参数后,通过正则表达式匹配URL,发送到对应视图进行处理,处理完毕后,视图调用M处理数据,再调用T返回界面给浏览器,然后显示到页面上。如下图所绘:

介绍MVC:
M全拼为Model(模块),主要封装对数据库层的访问, 数据处理,对数据库中的数据进行增、删、改、查操作。
V全拼为View(视图),界面显示,用于封装结果,生成页面展示的html内容。
C全拼为Controller(控制器),逻辑处理,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。
MVC模块的核心宗旨就是:解耦,模型的复用,让不同的代码之间的耦合度降低,增强代码的扩展性和可移植性还有方便维护,模型不用关心处理结果展现,比如模型返回一些数据,然后交给不用的视图展现,可以使用不同的视图来访问同一个模型。方便测试, 比如,将业务逻辑代码写在servlet里面,需要部署到容器上,然后才能测试。而将业务逻辑代码写在类里面,可以直接用main()测试(不依赖容器)。
MVC即模型,里面存在视图与控制器模式,就是为那些需要为同样的数据提供多个视图的应用程序而设计的。它很好地实现了数据层与表示层的分离,特别适用于开发与用户图形界面有关的应用程序,能够提高效率,降低耦合度,增加代码的可移植性,可以更好的去维护代码。
控制器:控制器是用来处理用户命令以及程序事件,模型维护数据并提供数据访问方法;
视图:视图用于数据的显示,把数据库中的数据显示到页面上。
MVC流程
MVC设计模式也可以叫做MVC的流程,从开头到结束,是怎样一步步执行的:
1,客户端发出请求
2,controll,接收请求,进行业务处理 发送给Model
3, 与关系型数据库进行交互 取得数据
4,将取到的数据返回给Model
5,将数据交给controller.进行处理
6,将数据给view进行HTML,css,js等进行封装
7,返回封装好的HTML给controll
8,controll返回给客户端进行渲染HTML和css执行js

MVC流程图
从流程图中可以看出,客户端发出请求到服务器,服务器处理请求,然后与数据库交互,提取数据,返回到服务器,服务器处理后发送给客户端,客户端接收,渲染到页面上。这就是MVC的流程,他的层次分明,耦合度低,前后端分离。
在项目开发中的MVC流程,

Web中的MVC
MVC的缺点:事物都有两面性,有好有坏,MVC也是这样,他的缺点如下
使用mvc,会增加代码量、相应地也会增加软件开发的成文,设计的难度也会增加,适合大型项目。
(1)视图跟控制器过于紧密的连接,(视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。【例如,不可能总是在jsp页面中直接访问模型,一般放在逻辑控制层进行处理,servlet】)
(2)增加了系统结构和实现的复杂性
(3)部分高级界面工具或构造器不支持MVC
(4)视图对模型数据的访问效率低(依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。【例如,页面的有一部分数据我并没有更新,但是提交到模型层照样会去获得返回显示
】)
(5)调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。
简单的小型项目,使用MVC设计反而会降低开发效率,层和层虽然相互分离,但是之间关联性太强,没有做到独立的重用
总结:Django的MVT模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,流程也是大致一样,本质上相同,两者的MV都是相同的,不同的是:T代表了模板,C代表了控制器,Django遵循的是MVC模式,而MVT是Django中的一种回调函数。
Django的MVT模式与MVC模式的更多相关文章
- iOS中常见的设计模式——单例模式\委托模式\观察者模式\MVC模式
一.单例模式 1. 什么是单例模式? 在iOS应用的生命周期中,某个类只有一个实例. 2. 单例模式解决了什么问题? 想象一下,如果我们要读取文件配置信息,那么每次要读取,我们就要创建一个文件实例,然 ...
- 模型-视图-控制器模式(MVC模式,10种常见体系架构模式之一)
一.简介: 架构模式是一个通用的.可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题.架构模式与软件设计模式类似,但具有更广泛的范围. 模型-视图-控制器模式,也称为MVC模式.是软件 ...
- Android中MVP模式与MVC模式比較(含演示样例)
原文链接 http://sparkyuan.me/ 转载请注明出处 MVP 介绍 MVP模式(Model-View-Presenter)是MVC模式的一个衍生. 主要目的是为了解耦,使项目易于维护. ...
- mvvm模式和mvc模式 概述总结对比
1.mvc模式简介: MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范.例如: angular ...
- Web开发中 MTV模式与MVC模式的区别 联系 概念
MTV 与 MVC模式的区别 联系 概念: MTV: 所谓MTV指的就是: M:model (模型),指的是ORM模型. T:template (模板),一般Python都是使用模板渲染的方式来把HT ...
- 【设计思想】MVC模式
MVC 模式 MVC 模式(三层架构模式) MVC模式(Model-View-Controller, MVC): 是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图( ...
- MVC 模式
1.MVC 模式简介 MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发.Model(模型):模型代表一个存取数据的对象或 JAV ...
- MVC模式浅谈
MVC模式浅谈 一.MVC模式概述 模型-视图-控制器(MVC模式)是一种非常经典的软件架构模式,在UI框架和UI设计思路中扮演着非常重要的角色.从设计模式的角度来看,MVC模式是 一种复合模式,它将 ...
- 《从零开始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式
原创文章,欢迎转载.转载请注明:关东升的博客 MVC(Model-View-Controller,模型-视图-控制器)模式是相当古老的设计模式之一,它最早出现在Smalltalk语言中.现在,很多计算 ...
随机推荐
- Image Storage
- Powser Design 16.5 导入Mysql数据库的bug
在Power Designer 16.5中,想导入mysql的某个数据库,选择导入后会导入全部数据库. 解决方案: 打开powerdesigner.选择file--->reverse engin ...
- Ubuntu 16.04下配置intel opencl环境
一. 靠谱的安装教程 1. 官网教程 https://software.intel.com/en-us/articles/sdk-for-opencl-2019-gsg,打开后往下拉到[4. Prod ...
- ABAP 程序/接口调用其他程序的数据
在ABAP遇到的业务场景中,可能会遇到一种情况,需要调用其他报表的数据来发送或者二次加工,这个时候又不想对源程序做大的改动.有以下几种思路解决. 1.修改源程序,将需要展示的数据存储到DB中,然后主程 ...
- Django 缓存
官方文档 缓存的出现就是为了减轻对数据库的压力和加快内存访问的速度.我们的访问请求最终都是返回一个大的字符串,缓存就是将这段字符串直接存储起来,下次你来了,不用经过view去数据库或者内存拿到数据再渲 ...
- Excel VBA 连接各种数据库(二) VBA连接Oracle数据库
本文主要内容: Oracle环境配置 ODBC驱动设置.第三方驱动下载 VBA连接Oracle连接方法 Oracle10g官方免账号下载地址 系统环境: Windows 7 64bit Excel 2 ...
- Python学习—框架篇之初识Django
什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有的W ...
- java实现将包含多个<REC>的文件拆成若干只包含一个<REC>的文件
遍历文件夹里的文件,将包含多个<REC>的文件拆成若干只包含一个<REC>的文件 package com.prepub; import java.io.BufferedRead ...
- 2018-2019-2 20175126谢文航 实验二《Java面向对象程序设计》实验报告
一.实验报告封面 课程:Java程序设计 班级:1751 班 姓名:谢文航 学号:20175126 指导教师:娄嘉鹏 实验日期:2019年4月17日 实验时间:--- 实验序号:实验二 实验名称:Ja ...
- (1)Linux常用的运维平台和工具
运维工程师使用的运维平台和工具包括: Web服务器:apache.tomcat.nginx.lighttpd 监控:nagios.ganglia.cacti.zabbix 自动部署:ansible.s ...