深入浅析Django MTV模式


Posted in Python onSeptember 04, 2021

MVC模式

MVC, 全名Model View Controller, 是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model), 视图(View)和控制器(Controller), 具有耦合性低,重用性高、生命周期成本低等优点。

深入浅析Django MTV模式

MVT模式

模型:数据存储层,处理与数据相关的所有事务,例如如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。负责业务对象与数据库的对象(orm)。
模板:表现层,处理与表现相关的决定,例如如何在页面或其他类型的文档中进行显示。
Django作为Web框架,需要一种很便利的方法动态的生成HTML网页,因此有了模板这个概念。模板包含所需HTML的部分代码以及一些特殊的语法,特殊语法用于描述如何将视图传递的数据动态插入HTML网页中。
Django可以配置一个或多个模板引擎(甚至是0个,如前后端分离,Django只提供API接口,无需使用模板引擎),模板引擎有Django模板语言(DTL)和Jinja2。Django模板语言是Django内置的功能之一,Jinja2是当前Python流行的模板语言。
视图:业务逻辑层,存取模型及调取恰当模板的相关逻辑,模型与模板的桥梁。主要负责处理用户请求和生成相应的相应内容,然后在页面或其他类型文档中显示。也可以理解为视图是MVC架构里面的C部分(控制器),主要处理功能和业务上的逻辑。我们习惯使用视图函数处理HTTP请求,记载视图里定义def函数,这种方式成为FBV(Function Base Views)。

深入浅析Django MTV模式

(引自:https://zhuanlan.zhihu.com/p/362268440

Django框架的基础就是MTV模式, 将开发任务分为三大部分:

  • Model:负责业务对象和数据库的关系映射(ORM),与MVC模式中的Model是等同。
  • Template:负责如何把页面展示给用户(HTML),这部分类似与MVC中的视图。
  • View:负责业务逻辑,并在适当时候调用Model和Template。跟MVC中的Controller等同。

深入浅析Django MTV模式

首先,我们要知道:MVT是什么?
昨天也提到了:
M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。

MVT是一个前沿的软件架构模式,它具有高效的ORM(Object Relation Mapping)数据操作,将程序中的对象【object】和数据库中的表【relation】建立关联关系,关系【mapping】的过程称为ORM.

为什么使用MVT结构?

1.实现高内聚低耦合易于开发
在实际开发过程中,需要根据不同的需求对原版本进行迭代,MVT把对数据库操作,请求处理和页面布局进行了分离,方便了对代码的更新,不需要牵一发而动全身,易于代码的维护。
2.提高开发效率
做到了前后端的分离,易于代码的整合.方便使用者分工合作。也提高了重用性,对于相似部分方便复用,提高了开发效率。
那么,你是不是还记住了那句话“Django框架遵循MVC设计”?MVC是个什么玩意儿?
M表示Model,主要用于对数据库层的封装;
V表示View,用于向用户展示结果;
C表示Controller,是核心,用于处理请求、获取数据、返回结果。

关于MVC,有3点需要注意:

1.大部分开发语言中都有MVC框架;
2.MVC框架的核心思想是:解耦;
3.能降低各功能模块之间耦合性,方便变更,更容易重构代码,最大程度实现代码重用。

最后,Django架构模式:
MVT架构模式:在MVC基础上,对控制器controller进行了封装,增加了模块功能【Templates】实现前端网页【Html】
MVC架构模式:数据model?>视图views?>数据交互?>服务器?>控制器controller?>相应函数的调用。

到此这篇关于Django MTV模式的文章就介绍到这了,更多相关Django MTV模式内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
操作Windows注册表的简单的Python程序制作教程
Apr 07 Python
进一步了解Python中的XML 工具
Apr 13 Python
python数组复制拷贝的实现方法
Jun 09 Python
Python使用迭代器捕获Generator返回值的方法
Apr 05 Python
Python实现字符串匹配算法代码示例
Dec 05 Python
使用Python获取并处理IP的类型及格式方法
Nov 01 Python
搞清楚 Python traceback的具体使用方法
May 13 Python
基于django ManyToMany 使用的注意事项详解
Aug 09 Python
Python3.7安装pyaudio教程解析
Jul 24 Python
python解包用法详解
Feb 17 Python
总结Python变量的相关知识
Jun 28 Python
python使用pycharm安装pyqt5以及相关配置
Apr 22 Python
python 进阶学习之python装饰器小结
Sep 04 #Python
自动在Windows中运行Python脚本并定时触发功能实现
Sep 04 #Python
关于python爬虫应用urllib库作用分析
解决pycharm下载库时出现Failed to install package的问题
关于python类SortedList详解
Sep 04 #Python
Python3.8官网文档之类的基础语法阅读
Sep 04 #Python
python实现Nao机器人的单目测距
Sep 04 #Python
You might like
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
javascript multibox 全选
2009/03/22 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
简单了解JavaScript异步
2019/05/23 Javascript
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
2020/05/23 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
Python入门篇之编程习惯与特点
2014/10/17 Python
在Python的列表中利用remove()方法删除元素的教程
2015/05/21 Python
在Python的Django框架中生成CSV文件的方法
2015/07/22 Python
Python格式化输出%s和%d
2018/05/07 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
Python之字典对象的几种创建方法
2020/09/30 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
制作部班长职位说明书
2014/02/26 职场文书
2014国培学习感言
2014/03/05 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
2021/08/23 MySQL
Docker部署Mysql8的实现步骤
2022/07/07 Servers