Django是一种基于Python开发的开源的高级Web应用框架,使用Django,使你能够以最小的代价构建和维护高质量的Web应用。Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能,Python 加 Django 是快速开发、设计、部署网站的最佳组合。
Django 框架的组成部分
Django 框架的核心包括:
一个 面向对象 的映射器,用作数据模型(以 Python 类的形式定义)和关系型数据库间的介质;
一个基于正则表达式的 URL 分发器;
一个视图系统,用于处理请求;
一个模板系统。
核心框架中还包括:
一个轻量级的、独立的 Web 服务器,用于开发和测试。
一个表单序列化及验证系统,用于 HTML 表单和适于数据库存储的数据之间的转换。
一个缓存框架,并有几种缓存方式可供选择。
中间件支持,允许对请求处理的各个阶段进行干涉。
内置的分发系统允许应用程序中的组件采用预定义的信号进行相互间的通信。
一个序列化系统,能够生成或读取采用 XML 或 JSON 表示的 Django 模型实例。
一个用于扩展模板引擎的能力的系统。
Django 包含了很多应用在它的 contrib 包中,这些包括:
一个可扩展的认证系统
动态站点管理页面
一组产生 RSS 和 Atom 的工具
一个灵活的评论系统
产生 Google 站点地图(Google Sitemaps)的工具
防止跨站请求伪造(cross-site request forgery)的工具
一套支持轻量级标记语言(Textile 和 Markdown)的模板库
一套协助创建地理信息系统(GIS)的基础框架
Django 的优点
完美的文档,Django近乎完美的官方文档。
完全免费并开源源代码、快速高效开发、强大的可扩展性
强大的URL路由配置,Django让你可以设计出非常优雅的URL。
自助管理后台,让你几乎不用写一行代码就拥有一个完整的后台管理界面。
全套的解决方案(full-stackframework + batteries included),基本要什么有什么(比如:cache、session、feed、orm、geo、auth),而且全部Django自己造,开发网站应手的工具Django基本都给你做好了,因此开发效率是不用说的。
Django 的缺点
Template功能比较弱,不能插入Python代码,要写复杂一点的逻辑需要另外用Python实现Tag或Filter。
URL配置虽然强大,但全部要手写,高手和初识Django的人配出来的URL会有很大差异。
自带的ORM远不如SQLAlchemy强大,SQLAlchemy是Python世界里事实上的ORM标准,其它框架都支持SQLAlchemy了,唯独Django仍然坚持自己的那一套。
Django的auth跟其它模块结合紧密,功能也挺强,但做的有点过了,用户的数据库schema都给你定好了,比如很多网站要求email地址唯一,可schema里这个字段的值不是唯一的。
系统紧耦合,如果你觉得Django内置的某项功能不是很好,想用喜欢的第三方库来代替是很难的,比如说的ORM、Template。要在Django里用SQLAlchemy或Mako几乎是不可能,即使打了一些补丁用上了也会让你觉得非常非常别扭。
MVC 模型
MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
MVC 以一种插件式的、松耦合的方式连接在一起。
模型(M)- 编写程序应有的功能,负责业务对象与数据库的映射(ORM)。
视图(V)- 图形界面,负责与用户的交互(页面)。
控制器(C)- 负责转发请求,对请求进行处理。
用户操作流程图:
MTV 模型
Django 的 MTV 模式本质上和 MVC 是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django 的 MTV 分别是指:
M 表示模型(Model):编写程序应有的功能,负责业务对象与数据库的映射(ORM)。
T 表示模板 (Template):负责如何把页面(html)展示给用户。
V 表示视图(View):负责业务逻辑,并在适当时候调用 Model和 Template。
除了以上三层之外,还需要一个 URL 分发器,它的作用是将一个个 URL 的页面请求分发给不同的 View 处理,View 再调用相应的 Model 和 Template
用户操作流程:
用户通过浏览器向我们的服务器发起一个请求(request),这个请求会去访问视图函数:
a.如果不涉及到数据调用,那么这个时候视图函数直接返回一个模板也就是一个网页给用户。
b.如果涉及到数据调用,那么视图函数调用模型,模型去数据库查找数据,然后逐级返回。
视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。
QQ群
扫码加公号1
扫码加公号2