Django MTV和MVC的区别详解

在上一节《Django是什么》中,我们对 Django 的诞生以及 Web 框架的概念有了基本的了解,本节我们介绍 Django 的设计模式,也就是 MTV。

在 Web 开发领域还有另外一个非常著名的设计模式——MVC,它和 MTV 又有什么区别呢?这也是本节关注的重点内容。

1. MVC设计模式

我们先对 MVC 设计模式进行介绍,它是 Web 设计模式的经典之作,MTV 模式也是在它的基础上衍生而来。

MVC 是 Model-View-Controller 的缩写,其中每个单词都有其不同的含义:

  • Modle 代表数据存储层,是对数据表的定义和数据的增删改查;
  • View 代表视图层,是系统前端显示部分,它负责显示什么和如何进行显示;
  • Controller 代表控制层,负责根据从 View 层输入的指令来检索 Model 层的数据,并在该层编写代码产生结果并输出。

图1:MVC 设计模式示意图

MVC 设计模式的请求与响应过程描述如下:

  • 用户通过浏览器向服务器发起 request 请求,Controller 层接受请求后,同时向 Model 层和 View 发送指令;
  • Mole 层根据指令与数据库交互并选择相应业务数据,然后将数据发送给 Controller 层;
  • View 层接收到 Controller 的指令后,加载用户请求的页面,并将此页面发送给 Controller 层;
  • Controller 层接收到 Model 层和 View 层的数据后,将它们组织成响应格式发送给浏览器,浏览器通过解析后把页面展示出来。

MVC 的 3 层之间紧密相连,但又相互独立,每一层的修改都不会影响其它层,每一层都提供了各自独立的接口供其它层调用,MVC 的设计模式降低了代码之间的耦合性(即关联性),增加了模块的可重用性,这就是 MVC 的设计模式。

2. MTV设计模式

那么 Django 的 MTV 又是怎么回事呢?下面讲解 Django 的设计模式。

Django 借鉴了经典的 MVC 模式,它也将交互的过程分为了 3 个层次,也就是 MTV 设计模式;

  • Model:数据存储层,处理所有数据相关的业务,和数据库进行交互,并提供数据的增删改查;
  • Template:模板层(也叫表现层)具体来处理页面的显示;
  • View:业务逻辑层,处理具体的业务逻辑,它的作用是连通Model 层和 Template 。

图2:Django MTV 设计模式示意图

我们按照 MVC 的设计模式对 MTV 进行分析,MTV 设计模式中,用 View 层取代了 Controller 层的位置,用 Template 层取代了原来 View 层的位置。

初次接触 Django 的设计模式的人,可能会对 Template 层产生疑问,其实 Template 英文的含义就是“模板”的意思,你可以简单理解成,它是一个 HTML 页面 ,HTML 页面的渲染在视图层完成。

同样我们也对 MTV 设计模式的请求与响应过程进行描述:

  • 用户通过浏览器对服务器发起 request 请求,服务器接收请求后,通过 View 的业务逻辑层进行分析,同时向 Model 层和Template 层发送指令;
  • Mole 层与数据库进行交互,将数据返回给 View 层;
  • Template 层接收到指令后,调用相应的模板,并返回给 View 层;
  • View 层接收到模板与数据后,首先对模板进行渲染(即将相应的数据赋值给模板),然后组织成响应格式返回给浏览器,浏览器进行解析后并最终呈现给用户。

通过以上两种设计模式的比较, 我们可以得出 MTV 是 MVC 的一种细化,将原来 MVC 中的 V 层拿出来进行分离,视图的显示与如何显示交给 Template 层,而 View 层更专注于实现业务逻辑。其实在 Django 是有 Controller 层的,只不过它由框架本身来实现,所以我们不用关心它。Django 更关注于M、T 和 V。

到此这篇关于Django MTV和MVC的区别详解的文章就介绍到这了,更多相关Django MTV和MVC内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何使用django的MTV开发模式返回一个网页

    1.MTV开发模式介绍 M:Models 模型(数据) 与数据组织相关的功能.组织和存储数据的方法和模式,与数据模型相关的操作. T:Templates 模板(样式) 与表现相关的所有功能.页面展示风格和方式,与具体数据分离,用于定义表现风格. V:Views 视图(处理) 针对请求选取数据的功能.选择哪些数据用于展示,指定显示模板,每个URL对应一个回调函数. 2.新建一个应用 在django最快程序开发流程上继续改进. python manage.py startapp hello2app

  • Django MTV和MVC的区别详解

    在上一节<Django是什么>中,我们对 Django 的诞生以及 Web 框架的概念有了基本的了解,本节我们介绍 Django 的设计模式,也就是 MTV. 在 Web 开发领域还有另外一个非常著名的设计模式--MVC,它和 MTV 又有什么区别呢?这也是本节关注的重点内容. 1. MVC设计模式 我们先对 MVC 设计模式进行介绍,它是 Web 设计模式的经典之作,MTV 模式也是在它的基础上衍生而来. MVC 是 Model-View-Controller 的缩写,其中每个单词都有其不同

  • 基于Django OneToOneField和ForeignKey的区别详解

    根据Django官方文档介绍: A one-to-one relationship. Conceptually, this is similar to a ForeignKey with unique=True, but the "reverse" side of the relation will directly return a single object. OneToOneField与ForeignKey加上unique=True效果基本一样,但是用OneToOneField反

  • Falsk 与 Django 过滤器的使用与区别详解

    1,flask中内置的过滤器模板中常用方法: {#过滤器调用方式{{变量|过滤器名称}} #} <!-- safe过滤器,可以禁用转义 --> {{'<strong>hello</strong>'|safe}} <br/> 大写转小写 {{'HELLO'|lower}} 小写转大写 {{'hello'|upper}} <br/> 字符串反转 {{'abc'|reverse}} 首字母大写 {{'james'|capitalize}} 过滤HTML

  • 基于Django filter中用contains和icontains的区别(详解)

    qs.filter(name__contains="e") qs.filter(name__icontains="e") 对应sql 'contains': 'LIKE BINARY %s', 'icontains': 'LIKE %s', 其中的BINARY是 精确大小写 而'icontains'中的'i'表示忽略大小写 以上这篇基于Django filter中用contains和icontains的区别(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考

  • 对django中render()与render_to_response()的区别详解

    render()与render_to_response()均是django中用来显示模板页面的,但是在django1.3之后,render()便比render_to_response()更加招人待见!最明显的就是前者会自动使用RequestContext,而后者需要coding进去, 例如: render(request,'share.html', {'registAdd': registAdd}) render_to_response('share.html',{'registAdd':reg

  • 对Django 中request.get和request.post的区别详解

    Django 中request.get和request.post的区别 POST和GET差异: POST和GET是HTTP协议定义的与服务器交互的方法.GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.另外,还有PUT和DELETE方法. POST和GET都可以与服务器完成查,改,增,删操作. GET提交,请求的数据会附在URL之后,以?分割URL和传输数据,多个参数用&连接: POST提交,把提交的数据放置在HTTP包的包体中:因此,GET提交的数据会在地址栏中显示出来,而PO

  • Django中get()和filter()返回值区别详解

    先上官方文档! filter(**kwargs) 返回包含与给定查找参数匹配的对象的新查询集. 简单来说,返回一个又对象组成的查询集合 get(**kwargs) 返回与给定查找参数匹配的对象,该对象应采用字段查找中描述的格式. 例子 例如在Model中有一个Order类,包含一个id字段,输入 id 为2019 字段的 id 1.get()方法 orders = Orders.objects.get(id=20190003) print(order) 先查看orders是什么,结果为 Orde

  • Python Django的安装配置教程图文详解

    Django 教程 Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架,由Python写成. Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 . Django采用了MVC的软件设计模式,即模型M,视图V和控制器C. 学习Django前,我们要确定电脑上是否已经安装了Python,目前Python有两个版本,不过这两个版

  • Django中使用Celery的教程详解

    Django教程 Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架,由Python写成. Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 . Django采用了MVC的软件设计模式,即模型M,视图V和控制器C. 一.前言 Celery是一个基于python开发的分布式任务队列,如果不了解请阅读笔者上一篇博文Celer

  • Python requests.post方法中data与json参数区别详解

    在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json. data与json既可以是str类型,也可以是dict类型. 区别: 1.不管json是str还是dict,如果不指定headers中的content-type,默认为application/json 2.data为dict时,如果不指定content-type,默认为application/x-www-form-urlencoded,相当于普通form表单提交的形式 3.data为s

随机推荐