标签:
这本书是关于一个web开发框架Django的,它将节省你大量的时间,并且使你的web开发充满乐趣。通过Django,你可以建立一个高性能的web应用而只花费最小的消耗。
从好的方面来看,Web 开发激动人心且富于创造性;从另一面来看,它却是份繁琐而令人生厌的工作。通过减少重复的代码,Django 使你能够专注于 web 应用上有 趣的关键性的东西。为了达到这个目标,Django 提供了通用Web开发模式的高度抽象,提供了频繁进行的编程作业的快速解决方法,以及为“如何解决问题”提供了清晰明了的约定。同时,Django 尝试留下一些方法,来让你根据需要在framework之外来开发。
本书的目的是将你培养成Django专家。主要侧重于两方面:第一,我们深度解释 Django 到底做了哪些工作以及如何用她构建Web应用;第二,我们将会在适当的地方讨论更高级的概念,并解释如何在自己的项目中高效的使用这些工具。通过阅读此书,你将学会快速开发功能强大网站的技巧,并且你的代码将会十分 清晰,易于维护。
在这一章中,我们将一览 Django 的全貌。
Django是一个卓越的新一代Web框架,而Django这个词语的意义是什么呢?
要回答这个问题,让我们来看看通过编写标准的CGI程序来开发Web应用,这在大约1998年的时候非常流行。编写CGI Web应用时,你需要自己处理所有的操作,就像你想烤面包,但是都需要自己生火一样。下面是实例,一个简单的CGI脚本,用Python写的,读取数据库并显示最新发布的十本书:
#!/usr/bin/python import MySQLdb print "Content-Type: text/html" print 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行代码从开始到结束做了些什么,不需要阅读额外的代码。同样这16行代码也很容易部署:只需要将它保存在名为“latestbooks.cgi”的文件里,上传至网络服务器,通过浏览器访问即可。
但是Web应用远远要复杂很多,这种方法就不再适用,而且你将会要面对很多问题:
当多个动态页面需要同时连接数据库时,将会发生什么?当然,连接数据库的代码不 应该同时存在于各个独立的CGI脚本中,所以最踏实的做法是把这些代码重新组织到一个公共函数里面。
一个开发人员真的需要去关注如何输出Content-Type以及完成所有操作后去关闭数据库么?此类问题只会降低开发人员的工作效率,增加犯错误的几率。那些初始化和释放相关的工作应该交给一些通用的框架来完成。
如果这样的代码被重用到一个复合的环境中会发生什么?每个页面都分别对应独立的数据库和密码吗?从这点看来,就需要一些环境相关的配置文件。
如果一个Web设计师,完全没有Python开发经验,但是又需要重新设计页面的话,又将 发生什么呢?理想的情况是,页面显示的逻辑与从数据库中读取书本记录分隔开,这样 Web设计师的重新设计不会影响到之前的业务逻辑。
以上正是Web框架致力于解决的问题。Web框架为应用程序提供了一套程序框架, 这样你可以专注于编写清晰、易维护的代码,而无需从头做起。简单来说,这就是Django所能做的。
让我们来研究一个简单的例子,通过该实例,你可以分辨出,通过Web框架来实现的功能与之前的方式有何不同。下面就是通过使用Django来完成以上功能的例子:
# models.py (the database tables) from django.db import models class Book(models.Model): name = models.CharField(maxlength=50) pub_date = models.DateField() # views.py (the business logic) from django.shortcuts import render_to_response from models import Book def latest_books(request): book_list = Book.objects.order_by(‘-pub_date‘)[:10] return render_to_response(‘latest_books.html‘, {‘book_list‘: book_list}) # urls.py (the URL configuration) from django.conf.urls.defaults import * import views urlpatterns = patterns(‘‘, (r‘latest/$‘, views.latest_books), ) # latest_books.html (the template) <html><head><title>Books</title></head> <body> <h1>Books</h1> <ul> {% for book in book_list %} <li>{{ book.name }}</li> {% endfor %} </ul> </body></html>
先不要担心这个东西是 如何 工作的,我们主要是先想让你知道总体的设计,这里关键要注意的是 分离问题
models.py 文件主要用一个 Python 类来描述数据表。称为 模型(model) 。 运用这个类,你可以通过简单的 Python 的代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的SQL语句。
view.py 文件的 latest_books() 函数中包含了该页的业务层逻辑。这个函数叫做 视图(view) 。
urls.py 指出了什么样的 URL 调用什么的视图,在这个例子中 /latest/ URL 将会调用 latest_books() 这个函数
latest_books.html 是 html 模板,它描述了这个页面的设计是如何的。
这些部分松散的组合在一起就是模型-视图-控制器(MVC)的设计模式。简单的说, MVC 是一种软件开发的方法,它把代码的定义和数据访问的方法(模型)与请求逻辑 (控制器)还有用户接口(视图)分开来。
这种设计模式关键的优势在于各种组件都是 松散结合 的。这样,每个由 Django驱动 的Web应用都有着明确的目的,并且可独立更改而不影响到其它的部分。比如,开发者 更改一个应用程序中的 URL 而不用影响到这个程序底层的实现。设计师可以改变 HTML 页面 的样式而不用接触 Python 代码。数据库管理员可以重新命名数据表并且只需更改一个地方,无需从一大堆文件中进行查找和替换。
本书中,每个组件都有它自己的一个章节。比如,第三章涵盖了视图,第四章是模板, 而第五章是模型。同时第五章也深入讨论了 Django 的 MVC 思想。
在我们讨论代码之前我们需要先了解一下 Django 的历史。知道了一些历史知识有助于理解为什么 Django 要建立这个框架,因为这些历史有助于理解Django为何会这样运作。
如果你曾编写过网络应用程序。那么你很有可能熟悉之前我们的 CGI 例子。传统的 网络开发人员的开发流程是这样的:
从头开始编写网络应用程序。
从头编写另一个网络应用程序。
从第一步中总结(找出其中通用的代码),并运用在第二步中。
重构代码使得能在第 2 个程序中使用第 1 个程序中的通用代码。
重复 2-4 步骤若干次。
意识到你发明了一个框架。
这就是为什么 Django 创建的原因!
Django 是从真实世界的应用中成长起来的,它是由 堪萨斯(Kansas)州 Lawrence 城中的一个 网络开发小组编写的。它诞生于 2003 年秋天,那时 Lawrence Journal-World 报纸的 程序员 Adrian Holovaty 和 Simon Willison 开始用 Python 来编写程序。 当时他们的 World Online 小组制作并维护当地的几个新闻站点, 并在以新闻界特有的快节奏开发环境中逐渐发展. 这些站点包括有 LJWorld.com、Lawrence.com 和 KUsports.com, 记者(或管理层) 要求增加的特征或整个程序都能在计划时间内快速的被建立,这些时间通常只有几天 或几个小时。因此为了需要,Adrian 和 Simon 开发了一种节省时间的网络程序开发框架, 这是在截止时间前能完成程序的唯一途径。
2005 年的夏天,当这个框架开发完成时,它已经用来制作了很多个 World Online 的站点。 当时 World Online 小组中的 Jacob Kaplan-Moss 决定把这个框架发布为一个开源软件。 他们在 2005 年的 7 月发布并取名为 Django,来源于一个著名的爵士乐吉他演奏家 Django Reinhardt。
虽然现在 Django 是一个全世界开发者参与的开源项目,但原始的 World Online 开发者们 仍然提供主要的指导来促进这个框架的成长。 World Online 还有其它方面的重要贡献,比如雇员时间、 市场材料以及框架的 Web 网站的主机和带宽(http://www.djangoproject.com/)。
这些历史都是相关联的,因为她们帮助解释了很重要的两点。第一,Django最可爱的地方, 因为Django诞生于一个新闻环境,她提供了很多的功能(特别是她的管理接口,见第6章), 特别适合提供内容的网站,例如eBay, craigslist.org和washingtonpost.com,提供一种 基于数据库的动态网站。(不要看到这就感到沮丧,尽管Django擅长于动态内容管理系统, 但并不表示Django主要的目的就是用来创建动态内容的网站。 某些方面 特别高效 与 其他方面 不高效 是有区别的)
第二,Django的起源造就她的开源社区,因为Django来自于真实世界中的代码,而不是 来自于一个科研项目或者商业产品,她主要集中力量来解决Web开发中遇到的问题,同样 也是Django的开发者经常遇到的问题。这样,Django每天在现有的基础上进步。框架的 开发者对于为开发人员节省开发时间具有极大的兴趣,编写更加容易维护的程序,同时 保证程序运行的效率。开发人员自我激励,尽量的节省时间和享受他们的工作(To put it bluntly, they eat their own dog food.)
在编写本书时,我们努力尝试在可读性和参考性间做一个平衡,当然本书会偏向于可 读性。本书的目标,之前也提过,是要将你培养成一名Django专家,我们相信,最好 的方式就是文章和充足的实例,而不是提供一堆详尽却乏味的关于Django特色的手册。 (曾经有人说过,如果仅仅教字母表是无法教会别人说话的。)
按照这种思路,我们推荐按顺序阅读第 1-7 章。这些章节构成了如何使用 Django 的基础;读过之后,你就可以搭建由 Django 支撑的网站了。剩下的章节重点讲述 Django 的其它一些特性,可以按照任何顺序阅读。
附录部分用作参考资料。要回忆语法或查阅 Django 某部分的功能概要时,你偶尔可能会回来翻翻这些资料以及http://www.djangoproject.com/ 上的免费文档。
本书读者需要理解基本的面向过程和面向对象编程:流程控制( if , while 和 for ),数据结构(列表,哈希表/字典),变量,类和对象。
Web开发经验,正如你所想的,也是非常有帮助的,但是对于阅读本书,并不是必须的。 通过本书,我们尽量给缺乏经验的开发人员提供在Web开发中最好的实践。
本质上来说, Django 只不过是用 Python 编写的一组类库。用 Django 开发站点就是使用这些类库编写 Python 代码。因此,学习 Django 的关键就是学习如何进行 Python 编程并理解 Django 类库的运作方式。
如果你有Python开发经验,在学习过程中应该不会有任何问题,基本上,Django的代码并 没有使用一些黑色魔法(例如代码中的欺骗行为,某个实现解释或者理解起来十分困难)。 对你来说,学习Django就是学习她的命名规则和API。
如果你没有使用 Python 编程的经验,你一定会学到很多东西。它是非常易学易用的。 虽然这本书没有包括一个完整的 Python 教程, 但也算是一个恰当的介绍了 Python特征和 功能的集锦。当然,我们推荐你读一下官方的 Python 教程,它可 以从http://docs.python.org/tut/ 在线获得。另外我们也推荐 Mark Pilgrims的 书 Dive Into Python (http://www.diveintopython.org/ )
正如我们之前提到的,Django 改进频繁,到本书出版时,可能有一些甚至是 非常基本 的新功能将被推出。因此,作为作者,我们要通过此书达到两个方面的目标:
保证本书尽可能的面向未来,因此,不管你在本书中读到什么内容,在未来新 的Django版本中都将会可用的。
及时的更新本书的在线版, http://www.djangobook.com/ ,这样在我们完成 新的章节后,你可以获得最新和最好的版本。
如果你想用django来实现某些书中没有提到的功能,请到前面提到的网站上检查这本书 的地最新版本,并且同样记得要去检查官方的django文档。
django的最大的益处是,有一群乐于助人的人在django社区上.你可以毫无约束的提各种 问题在上面如:从django的安装,app 设计,db 设计,发布。
http://www.djangoproject.com/r/django-users . 来免费注册。
django irc channel如果django用户遇到什么棘手的问题希望的及时地回复是可以使用它。 在freenode IRC network加入#django
(本文转自:http://djangobook.py3k.cn/chapter01/)
标签:
原文地址:http://www.cnblogs.com/6bing/p/4328805.html