`

The Django Book - 1 [学习]

阅读更多
Chapter 1:Django概论
这本书介绍Django,它是Web开发框架,可以节约时间并且使Web开发成为乐趣。使用Django,你能平稳有序地构建和维护高质量Web应用。
最佳情况下,Web开发是令人兴奋的,创造性地活动;最糟糕时,它是重复的,令人沮丧的行为。Django让你集中精力在有趣的任务上——你的Web应用的关键——减少不断重复的痛苦。通过这样做,它提供了通用Web开发模式的高层抽象,高频率编程任务的快捷方式,怎样解决问题的明确习惯。与此同时,Django尝试置身事外,让你工作在需要的框架外围。
这本书的目标是使你成为Django专家。重点是双重的。首先,我们深入解释Django做什么以及怎么样使用它构建Web应用。然后,我们讨论更高级的概念,这儿回答了问题“我怎样在我的工程中有效的用这些工具?”。通过读这本书你将会了解快速强有力Web站点的技能,同时有干净和易于维护的代码。

什么是Web框架?
Django是新一代Web框架的基础成员——但是这个词精确的含义是什么?
回答这个问题时,让我们考虑不使用框架的,使用Python编写的Web应用设计。通过这本书,我们将会采用这种方法,向你展示不使用快捷方式完成工作的基本方法。希望你将会认识到为什么捷径是非常有帮助的。(了解不使用捷径怎样完成整个流程是非常有价值的,因为捷径不总是可用的。并且最重要的是,知道工作机制,这会使你成为更好的Web开发者)
最简单的、最直接的方法是从零开始使用CGI构建Python Web应用,大约1998年成为受欢迎的技术。它工作机制有更高层次的解释:仅创建Python脚本输出HTML,然后以".cgi"扩展名保存脚本到Web服务器,并且在Web浏览器中访问你的页面。就这样。
举个例子,Python CGI脚本从数据库中获取近期会出版的书。不用担心语法细节;仅对它正做地事情得到一些感受:
#!/usr/bin/env python

import MySQLdb

print "Content-Type: text/html\n"
print "<html><head><title>Books</title></head>"
print "<body>"
print "<h1>Books</h1>"
print "<ul>"

connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db')
cursor = connection.cursor()
cursor.execute("SELECT name FROM books ORDER BY pub_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的标识以及关闭数据库连接。
像这样的一页,从零写起的方法并不是坏的。这段代码是易于理解的——即使新手也能读懂这16行Python代码,并且理解它做的每件事情,从开始到结束。没有任何事情需要学习,没有另外的代码去阅读。它是简单的部署:仅仅保存这段代码在一个以“.cgi”结束文件,上传这个文件到Web服务器中,使用浏览器访问这个页面。
但是尽管它是简单的,这种方法有大量的问题。问你自己这些问题:
  • 当你的应用多个部分需要连接数据库会发生什么呢?肯定地,数据库连接代码不需要在每个CGI脚本中复制代码。要做的是重构它到一个共享函数。
  • 开发者真的需要打印“Content-Type”行并且记住关闭数据库连接?样板文件减少了程序员的成果并且增加了引入错误的机会。这些setup-和teardown-相关的代码将会是被一些通用的架构处理的。
  • 当代码在多个环境中复用时会发生什么?每个数据库有不同的代码和密码怎么办?在这一点,一些特定环境的配置变得必要起来。
  • 当没有使用Python编码的Web设计者希望重新设计页面会发生什么?一个错误的字符会破坏整个应用。理想状况下,页面的逻辑——从数据库中取得书名——将会从页面的HTML显式中分出来,因此设计者能在稍后不影响前者编辑。

这些问题是精确的——Web框架打算解决什么。Web框架为你的应用提供了编程架构,以至于你能重点写干净的,可维护的代码,而不需要重新造轮子,这就是Django所作的。


未完待续……
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics