咱们都知道,Django是一种基于Python的Web开发框架。html
那么,什么是Web开发?Web开发指的是开发基于B/S架构,经过先后端的配合,将后台服务器的数据在浏览器上展示给前台用户的应用。好比将电子购物网站的商品数据在浏览器上展现给客户,在基于浏览器的学校系统管理平台上管理学生的数据,监控机房服务器的状态并将结果以图形化的形式展示出来等等。前端
使用Python开发Web应用,最简单、原始和直接的办法是使用CGI标准,在二十年前这种方式很流行。它是如何作的呢? 以使用Python CGI脚本显示数据库中最新添加的10件商品为例:python
import pymysql print("Content-Type: text/html\n") print("<html><head><title>products</title></head>") print("<body>") print("<h1>products</h1>") print("<ul>") connection = pymysql.connect(user='user', passwd='pwd', db='product_db') cursor = connection.cursor() cursor.execute("SELECT name FROM products ORDER BY create_date DESC LIMIT 10") for row in cursor.fetchall(): print("<li>%s</li>" % row[0]) print("</ul>") print("</body></html>") connection.close()
服务过程是这样的:首先,用户请求CGI,脚本代码打印Content-Type
行等一些HTML的起始标签,而后链接数据库并执行一些查询操做,获取最新的十件商品的相关数据。在遍历这些商品的同时,生成一个商品的HTML列表项,而后输出HTML的结束标签而且关闭数据库链接。将生成的HTML代码保存到一个.cgi
文件中,而后上传到网络服务器上,用户经过浏览器便可访问。mysql
这个流程看起来不错,简单易懂,实际有不少问题和不方便的地方,好比:程序员
以上的问题是显而易见的,聪明的程序员在不断的碰到问题和解决问题,探索方案和实践方案中,重复了下面的过程:web
最初的Web开发框架就是这么来的!正则表达式
Web框架致力于解决一些共同的问题,为Web应用提供通用的架构,让用户专一于网站应用业务逻辑的开发,而无须处理网络应用底层的协议、线程、进程等方面的问题。这样能大大提升开发者的效率和Web应用程序的质量。sql
通常Web框架的架构是这样的:数据库
大多数基于Python的web框架,如Django、tornado、flask、webpy都是在这个范围内进行增删裁剪的。例如Tornado用的是本身的异步非阻塞“WSGI”网关接口,Flask则只提供了最精简和基本的框架,Django则是直接使用了现成的WSGI,并实现了大部分功能,提供了大量的应用工具。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具备如下特色:
在目前基于Python语言的几十个Web开发框架中,几乎全部的全栈框架都强制或引导开发者使用MVC设计模式。所谓全栈框架,是指除了封装网络和线程操做,还提供HTTP、数据库读写管理、HTML模板引擎等一系列功能的Web框架,好比Django、Tornado和Flask。
MVC设计模式:
最先由Trygve Teenskaug
在1978年提出,上世纪80年代是程序语言Smalltalk的一种内部架构。后来MVC被其余领域借鉴,成为了软件工程中的一种软件架构模式。MVC把Web框架分为3个基础部分:
模型(Model):用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是Web应用程序中用于处理应用程序的数据逻辑的部分,Model只提供功能性的接口,经过这些接口能够获取Model的全部功能。白话说,这个模块就是Web框架和数据库的交互层。
视图(View):负责数据的显示和呈现,是对用户的直接输出。
控制器(Controller):负责从用户端收集用户的输入,能够当作提供View的反向功能。
这三个部分互相独立,但又相互联系,使得改进和升级界面及用户交互流程,在Web开发过程任务分配时,不须要重写业务逻辑及数据访问代码。
MVC在Python以外的语言中也有普遍应用,例如VC++的MFC,Java的Structs及Spring、C#的.NET开发框架,都很是有名。
MTV设计模式:
Django对传统的MVC设计模式进行了修改,将视图分红View模块和Template模块两部分,将动态的逻辑处理与静态的页面展示分离开。而Model采用了ORM技术,将关系型数据库表抽象成面向对象的Python类,将表操做转换成类操做,避免了复杂的SQL语句编写。MTV和MVC本质上是同样的。
模型(Model):和MVC中的定义同样
模板(Template):将数据与HTML语言结合起来的引擎
视图(View):负责实际的业务逻辑实现
Django的MTV模型组织可参考下图所示: