该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及官网地址。 教程环境:Win7/10 + Python3.6 + pip + Pycharm + Django1.11 引言
我们都知道,Django是一种基于Python的Web开发框架。
那么,什么是Web开发?Web开发指的是开发基于B/S架构,通过前后端的配合,将后台服务器的数据在浏览器上展现给前台用户的应用。比如将电子购物网站的商品数据在浏览器上展示给客户,在基于浏览器的学校系统管理平台上管理学生的数据,监控机房服务器的状态并将结果以图形化的形式展现出来等等。
使用Python开发Web应用,最简单、原始和直接的办法是使用CGI标准,在二十年前这种方式很流行。它是如何做的呢? 以使用Python CGI脚本显示数据库中最新添加的10件商品为例:
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文件中,然后上传到网络服务器上,用户通过浏览器即可访问。
这个流程看起来不错,简单易懂,实际有很多问题和不方便的地方,比如:
如果应用中有多处需要连接数据库会怎样呢?每个独立的CGI脚本,不应该重复编写数据库连接相关的代码。
前端、后端工程师以及数据库管理员集于一身,无法分工配合。设想一个前端设计师,完全没有Python开发经验,但是又需要编写SQL语句的话,会发生什么呢?(我有一句话不知当讲不当讲?)
如果代码被重用到一个复合的环境中会发生什么?
直接将数据库的密码写在代码里吗?
今天是取十个商品,明天我要删除十个商品怎么办?
以上的问题是显而易见的,聪明的程序员在不断的碰到问题和解决问题,探索方案和实践方案中,重复了下面的过程:
开始编写一个新的Web应用
开始编写另一个Web应用
从第一步中总结经验(找出其中通用的代码),并运用在第二步中
重构代码使得能在第二个应用中使用第一个程序中的通用代码
重复2-4步若干次
发明了一个Web框架。
最初的Web开发框架就是这么来的!
Web框架致力于解决一些共同的问题,为Web应用提供通用的架构,让用户专注于网站应用业务逻辑的开发,而无须处理网络应用底层的协议、线程、进程等方面的问题。这样能大大提高开发者的效率和Web应用程序的质量。
一般Web框架的架构是这样的:
大多数基于Python的web框架,如Django、tornado、flask、webpy都是在这个范围内进行增删裁剪的。例如Tornado用的是自己的异步非阻塞“WSGI”网关接口,Flask则只提供了最精简和基本的框架,Django则是直接使用了现成的WSGI,并实现了大部分功能,提供了大量的应用工具。
DjangoDjango是一个由Python编写的具有完整架站能力的开源Web框架。使用Django,只要很少的代码,Python的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的Web服务。
Django本身基于MVC模型,即Model(模型)+View(视图)+ Controller(控制器)设计模式,因此天然具有MVC的出色基因:开发快捷、部署方便、可重用性高、维护成本低等。Python加Django是快速开发、设计、部署网站的***组合。
Django诞生于2003年,2006年加入了BSD许可证,成为开源的Web框架。Django这一词语是根据比利时的爵士音乐家Django Reinhardt命名的,有希望Django能够优雅地演奏(开发)各种乐曲(Web应用)的美好含义。