Django 01 前世今生

2/25/2017 Django

[toc]

# Django

# 概念

Django是一个由Python编写的具有完整架站能力的开源Web框架。使用Django,只要很少的代码,Python的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的Web服务。

Django本身基于MVC模型,即Model(模型)+View(视图)+ Controller(控制器)设计模式,因此天然具有MVC的出色基因:开 发快捷、部署方便、可重用性高、维护成本低等。Python加Django是快速开发、设计、部署网站的最佳组合。

Django诞生于2003年,2006年加入了BSD许可证,成为开源的Web框架。Django这一词语是根据比利时的爵士音乐家Django Reinhardt命名的,有希望Django能够优雅地演奏(开发)各种乐曲(Web应用)的美好含义。

Django是由美国堪萨斯(Kansas)州Lawrence城中的一个新闻开发小组开发出来的。当时Lawrence Journal-World报纸的程序员Adrian Holovaty和Simon Willison用 Python 编写Web新闻应用,他们的 World Online小组制作并维护了当地的几个新闻站点。新闻界独有的特点是快速迭代,从开发到上线,通常只有几天或几个小时的时间。为了能在截止时间前完成工作,Adrian和Simon打算开发一种通用的高效的网络应用开发框架,也就是Django。

2005年的夏天,当这个框架开发完成时,它已经用来制作了很多个World Online的站点。不久,小组中的Jacob Kaplan-Moss决定把这个框架发布为一个开源软件,于是短短数年,Django项目就有着数以万计的用户和贡献者,在世界范围内广泛传播。 原来的World Online的两个开发者(Adrian and Jacob)仍然掌握着Django,但是其发展方向受社区团队的影响更大。

# “Django”是什么意思,怎么发音?

Django 的名字来源于 Django Reinhardt,一个活跃在1930 年到 1950 年代初期的吉普赛吉他工作室,直到今天,他们依然被认为是史上最好的吉他手之一。

聆听他的音乐. 你会喜欢它的.

Django 发音为 JANG,使用 FANG 来押韵,字母 "D "是不发声的.

发音的音频片段 (opens new window)

# 特点

  • 功能完善

  • 文档齐全:经过十多年的发展和完善,Django有广泛的实践经验和完善的在线文档(可惜大多数为英文)。开发者遇到问题时可以搜索在线文档寻求解决方案。

  • 强大的数据库访问组件: Django的Model层自带数据库ORM组件,使得开发者无须学习其他数据库访问技术(SQL、pymysql、SQLALchemy等)。当然你也可以不用Django自带的ORM,而是使用其它访问技术,比如SQLALchemy。

  • 灵活的URL映射:Django使用正则表达式管理URL映射,灵活性高。

  • 丰富的Template模板语言:类似jinjia模板语言,不但原生功能丰富,还可以自定义模板标签。

  • 自带免费的后台管理系统:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。

  • 完整的错误信息提示:在开发调试过程中如果出现运行错误或者异常,Django可以提供非常完整的错误信息帮助定位问题。

# MVC 和 MTV 设计模式

# MVC模型

MVC,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:

  • 模型(Model)
  • 视图(View)
  • 控制器(Controller),

他们之间以一种插件式的、松耦合的方式连接在一起。具有耦合性低、重用性高、生命周期成本低等优点。

Model:负责业务对象与数据库的映射(ORM)

View:负责与用户的交互

Control:接受用户的输入调用模型和视图完成用户的请求

# MTV模型

Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。

MTV框架是Django的框架,三部分为:

  • Model
  • Template(模板)
  • View

Model(模型):负责业务对象与数据库的对象(ORM)

Template(模版):负责如何把页面展示给用户

View(视图):负责业务逻辑,并在适当的时候调用Model和Template

此外,Django还有一个urls分发器,

它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template

Django的MTV和广义上的MVC的对应关系:

模型(Model)----models.py 视图(View)----templates 控制器(Controller)-----View.py和urls.py

# Django 似乎是一个 MVC 框架,但是您将控制器称为“视图”,并视图称为“模板”。 为什么不使用标准命名?

当然,标准化的名称是有争议的。

在我们对 MVC 的解释中,“视图”描述了呈现给用户的数据。数据看起来怎么样并不重要,重要的是哪些数据被呈现。该视图描述了 您看到了哪些数据,而不是 您怎么看到数据。这是一个微妙的区别。

所以,在我们的例子里,一个"视图(view)"是 Python 中针对一个特定 URL的回调函数,此回调函数描述了需要展示的数据。

此外,将内容和展示效果分开是很明智的,展示效果就是模板。在 Django 里面,一个视图(view)描述了哪些数据会被展示,但是一个视图通常代表了一个模板,这个模板描述了数据是如何被展示的。

那控制器(Controller)在什么位置?在 Django 中,控制器可能指的是框架本身,框架会根据 DjangoURL 配置,将请求分发到适当的视图(view)。

如果你想要首字母缩写, 你可能会说Django 是一个 "MTV" 框架--即 "模型(Model) "、 "模板(Template)" 和 "视图(View). 这种划分更有意义。