概述

django 框架是在 2005 年开源,是迄今为止 python web 开发界名气最大的框架, 以 github 星星数量来比, 它遵循 Model-View-Template 开发模式,那么在使用之前就必须了解 django 的 MVT 架构设计。

django 开发模式:MVT 模式

说道 MVT 模式就不得不提 MVC, MVC 是由视图View、控制器Controller、模型Model组成,在我们实际使用中模型主要负责应用程序核心逻辑, 视图用来处理和客户端的交互操作, 控制器定义程序行为的操作, 大部分开发语言中都有 MVC 框架, 它的核心是解耦, 降低各功能模块之间的耦合性, 方便修改, 容易重构代码, 最大程度上实现代码的重用。
MVT 基于 MVC, 并在 MVC 的基础上做了更细的划分, 区别主要在于 C 和 T,C之前是控制器, 现在变成了 Template 把 C 融入到了 View 里, 视图负责业务逻辑并在需要的时候调用 model 和 template 把页面展示给使用者。

django 主要组成部分

管理工具(Management):后台站点管理
模型(Model):提供模型的定义以及数据库操作工具(orm)
视图(View):实现向使用者返回 web 页面资料等功能
模板(Template):django 有一套自己页面渲染语言, 自定义页面的生成方式, 但在目前前后端分离的模式中已经逐渐淘汰
表单(Form): 可以进行数据的校验,也可以根据数据库中的属性生成 html 表单

Views 层

用户通过浏览器向服务器发送请求, 服务器匹配到对应的 url 进行分发,django 判断此请求是否有相应的响应,这就到了 view 层, 也是 MVT 开始起作用的地方, 视图是请求的响应, 可以是一系列的数据, 也可以是一个 html 页面,view 层是模板与模型的连接点,用来展示用户可以看到的数据, 也可以接受用户提交的数据, 比如保存数据到数据库中, 通常与 url 一起工作, 根据 urls.py 中的关系条目, 去找到请求对应的视图函数, 那么单单知道以上流程就行了吗?上述我们提到 MVT 和 MVC 都是为了解耦才提出来的这种架构,目的就是为了每层做每层应该做的事情, 这样才能最大化的发挥每层的优势,view 层里面要应该做哪些? 尽量不去做哪些任务呢?
应该做的事情:
做一些增删改查的操作, 和数据库相关的尽量放到 model 层去操作, 避免做过多的逻辑, 他的任务就是接收数据,响应数据
不应该做的事情:
避免大量的 sql 操作,复杂的数据逻辑处理, 应抽象到每个 model 里

Model 层

Model 层是一个重要的部分, 它涉及到对数据库的操作,如果一个请求需要花费好几秒那大部分原因就是数据库没设计好或者是查询时效率不高,django 提供了一个重要的工具就是 ORM, 它实现了数据库的面向对象, 但底层还是原生 sql, 解耦了数据模型与数据库的解耦, 通常在 Django 中表的定义一般在 models.py 文件中,减轻了开发人员因数据库变更而导致的无效劳动, 它提供了相关的命令(makemigratios\migrate)使得对数据库的映射和变更,model 层负责数据的存储, 对外提供强大的管理器供开发人员做一些列的增删改查操作,对于请求,视图会从对应的模型中获取必要的数据,django 底层翻译成相应的 sql 到数据库中去执行,从而返回数据或者创建数据, 但 orm 翻译成 sql 的过程本身也是影响了效率, 但是没有太大的损伤,最主要的我们怎么合理的去设计数据库,避免重复的数据库操作。
对于一个 wbe 请求, 数据库分配到的工作越多,数据库请求次数越少, 从而效率越高,避免循环中操作数据库, 杀死django性能最简单的方式就是在for循环中使用 query 单次的数据库请求是很快的, 但是多次请求就会严重影响效率。
多去扩展一些子查询 annotations 和 queryset ,可以大幅度提高你的 web 性能,传递给annotate函数的每个参数,都会以"注解"的形式添加到model queryset返回的每一个object里面。
应该做的事情:
关于数据库操作放到 model 中操作, 或者使用一些子查询

Templates 层

在目前的前后端分离的开发模式中,已经不使用这种模板渲染的方式了, 他是早期在 ajax 中经常使用的方式,模板不过是Django应用程序的前端组件。它包含网页的静态HTML输出以及动态信息。为了动态生成HTML,Django将模板语言和静态 HTML 结合起来, 后端提供数据, 前端负责把数据渲染出来,使得能够动态显示模型中的数据。

总结

  1. view 层做业务的增删改查, 避免做过多的其他逻辑或是循环查询
  2. model 层做数据的处理,和数据库有关的放到 model 中处理

django 之深入理解 MVT 模式相关推荐

  1. Django的MVT模式

    MVT模式 有一种程序设计模式叫MVC,其核心思想是分工.解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容. MVC的全拼为Model-View-Controller,最早 ...

  2. 详细介绍MVC与Django的MVT模式

    Django 由python实现的,开源的,Web开发框架 起初被开发来用于管理劳伦斯日报(Lawrence Journal-World)旗下的新闻内容网站 2005年7月在BSD许可协议下发布 Dj ...

  3. **Django介绍 和 MVT 模式 MVC 模式对比**

    1. 简介 Django,发音为[`dʒæŋɡəʊ],是用python语言写的开源web开发框架,并遵循MVC设计.劳伦斯出版集团为了开发以新闻内容为主的网站,而开发出来了这个框架,于2005年7月在 ...

  4. django MVT模式介绍

    Django介绍 1. 简介 Django,发音为[`dʒæŋɡəʊ],是用python语言写的开源web开发框架,并遵循MVC设计.劳伦斯出版集团为了开发以新闻内容为主的网站,而开发出来了这个框架, ...

  5. 设计模式中,MVC模式与MVT模式的区别

    1.MVC模式 有一种程序设计模式叫MVC,其核心思想是分工.解耦,让不同的代码块之间降低耦合,增强代码的 可扩展性和可移植性,实现向后兼容. MVC的全拼为Model-View-Controller ...

  6. web开发与django认识 MVC和MVT的区别 路由的匹配

    文章目录 一.web开发 1.简介 2.客户端服务器请求过程 3.web开发思维 二.Django 1.Django简介 2.Django与flask的优缺点 3.Django的环境安装 4.virt ...

  7. 深入理解建造者模式 ——组装复杂的实例

    历史文章回顾: 设计模式专栏 深入理解单例模式 深入理解工厂模式 历史优质文章推荐: 分布式系统的经典基础理论 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就 ...

  8. 从理解Future模式到仿写JUC的Future模式

    1.Future模式 过生日,在线上定蛋糕的例子可以形象的解释Future模式. 两个步骤: 1.下单 - 委托制作蛋糕:你在线定下单订蛋糕,将制作蛋糕的工作委托给了蛋糕店. 2.取蛋糕:凭着在线支付 ...

  9. 理解用户模式(User Mode)和内核模式(Kernel Mode)

    理解用户模式(UserMode)和内核模式(KernelMode)

最新文章

  1. C++11中override的使用
  2. java for 最后_Java的for循环中调用了查询服务,最后只打印了循环的最后一条数据(循环次数)次...
  3. 20200406 托普雷兹矩阵 Toeplitz
  4. Linux Ubuntu 修改Grub,添加删除启动项,初步辨析Grub文件。
  5. C和指针之字符串编程练习9(在参数1中查找匹配参数2额任意字符)
  6. RabbitMQ 的延时队列和镜像队列原理与实战
  7. 游戏窗口组合键消息失败_5失败的投资组合,以后我在这里
  8. Eclipse Java Build Path详解
  9. 行业观察:拐点已至!抛弃传统数据库,乘云而上!
  10. 人工智能:从单细胞生物的智能说起
  11. aes默认填充算法 mysql_Go 实现加密算法系列之对称加密
  12. c语言中用递归求平方根,下列给定程序中,函数fun()的功能是:应用递归算法求某数a的平方根。求平方根的迭代公式如下: 例如 - 赏学吧...
  13. [洛谷1533] 可怜的狗狗
  14. 给力者基于51单片机的C语言教程,给力者单片机开发教程
  15. 简单通用的Makefile编写例子
  16. h5实现图片预览效果,模拟淘宝上传图片样式
  17. python爬取其他人微信朋友圈_python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈...
  18. 智能分析网关微信端告警消息推送的开发流程
  19. 计算机毕设Python+Vue兴发农家乐服务管理系统(程序+LW+部署)
  20. Golang 计算MD5值

热门文章

  1. php查询后并导出excel,PHP如何将查询结束导出Excel
  2. JPEG图像的压缩编码——笔记整理
  3. postgres 源码解析9 CLOG管理器--1
  4. 2021-4-26大学化学(9)分步沉淀、沉淀转化与本章小结
  5. 自动驾驶数据掘金就像大海捞鱼,你有什么样的捕鱼工具?丨WAIC2021
  6. jetson nano写入镜像系统
  7. 物联网时代来了,大数据也终于有了用武之地
  8. 结合WMI和DeviceIoControl获取网卡原生MAC地址和当前MAC地址
  9. 微型计算机代表性机型,接下的旗舰机型将能频繁看到它!高通骁龙845解析
  10. C语言printf压栈问题