第一章 Django之web框架(1)

Django 是新一代 Web 框架 中非常出色的成员。那么 Web 框架这个术语的确切含义到底是 什么呢?


  要回答这个问题,让我们来看看通过编写标准的 CGI 程序来开发 Web 应用,这在大约1998年的时候非常流行。编写 CGI Web 应用时,你需要自己处理所有的操作,就像你想烤面包,但是都需要自己生火一样。下面是实例,一个简单的 CGI 脚本,用 Python 写的,读取数据库并显示最新发布的十本书。

 1 #!/usr/bin/python 
 2  
 3 import MySQLdb 
 4  
 5 print "Content-Type: text/html" 
 6 print "<html><head><title>Books</title></head>" 
 7 print "<body>" 
 8 print "<h1>Books</h1>" 
 9 print "<ul>" 
10  
11 connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db') 
12 cursor = connection.cursor() 
13 cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10") 
14 for row in cursor.fetchall():     
15     print "<li>%s</li>" % row[0] 
16  
17 print "</ul>" 
18 print "</body></html>" 
19  
20 connection.close() 

代码十分简单。首先,根据 CGI 的要求输出一行 Content-Type,接下来是一个空行。再接下来是一些 HTML 的起始标签,然后连接数据库并执行一些查询操作,获取最新的十本书。遍历这些书,同时生成一个 HTML 的无序序列。最后,输出 HTML 的结束标签并且关闭数据库连接。
  像这样的一次性的动态页面,从头写起的方法并非一定不好。其中一点:这些代码简单易懂,就算是一个初起步的 开发者都能读明白这16行的 Python 代码,而且这些代码从头到尾做了什么都能了解得一清二楚。不需要学习额外的背景知识,没有额外的代码需要去了解。同样,也易于部署这16行代码,只需要将它保存为一个 latestbooks.cgi 的文件,上传到 Web 服务器上,通过浏览器访问即可。
  但是,一个 Web 应用要远复杂于以上情况,这种方法很快会失效,而且你将会要面对很多问 题:

  • 当多个动态页面需要同时连接数据库时,将会发生什么?当然,连接数据库的代码不应该同时存在于各个独立的 CGI 脚本中,所以最踏实的做法是把这些代码重新组织到一个公共函数里面。
  • 一个开发人员确实需要去关注如何输出 Content-Type 以及完成所有操作后去关闭数据库么?此类问题只会降低开发人员的工作效率,增加犯错误的几率。那些初始化和释放相关的工作应该交给一些通用的框架来完成。
  • 如果这样的代码被重用到一个复合的环境中会发生什么?每个页面都分别对应独立的数据库和密码吗?从这点看来,就需要一些环境相关的配置文件。
  • 如果一个 Web 设计师,完全没有 Python 开发经验,但是又需要重新设计页面的话,又将发生什么呢?理想的情况是,页面显示的逻辑与从数据库中读取书本记录分隔开,这样 Web 设计师的重新设计不会影响到之前的业务逻辑。

  以上正是 Web 框架致力于解决的问题。Web 框架为应用程序提供了一套程序框架,这样你可以专注于编写清晰、易维护的代码,而无需从头做起。简单来说,这就是 Django 所能做的。

原文:《The Django Book》 http://djangobook.py3k.cn/

原文地址:https://www.cnblogs.com/mzxiaoze/p/9103880.html