第一章 Django介绍
引:最近一段时间在学PYTHON及其相关的WEB编程,接触到Django,深被其所吸引,功能完备的一个WEB框架,代码优雅,结构清晰,因此有一种 强烈的要学习和掌握它的冲动。遂开始从Django Book的免费文档开始看起。django book属于指导django初学者从入门到精通的书,虽然没有包括django的所有方面,但是对其的讲解却很到位,很值得初学者阅读。这本书目前为止也是在创作过程中,所以没有中文文档,考虑到国内很多与我一样想要学习django的 人看这本英文书会有不便,就产生了将其翻译的想法。当然我的英语水平极其有限,只能按自己的理解进行翻译,不当或错误之处不可避免,只是为提供参考,也就 冒被骂之险贴于此处,呵呵。若对你有帮助,一句谢谢就足以表达对我的肯定,若有意义或建议请一并提出。同时愿这本书能对你的职业能力的提升提供帮助!
本书是关于Django的,它是一个Web开发框架,通过它进行WEB开发可以节省时间并充满乐趣。使用Django可以构建和维护一个高质量的Web应用程序,同时保持最低限度的维护代价!
就web开发来说,好的一面是,它是一项刺激的并带有创造性的行为;差的一面是,它是重复性的,并会使人遭受挫败。Django让你能将精力集中在Web应用的关键点上,而不是重复的小事上。因此,它提供一一个通用Web开发模式的高级抽象,常见编程任务的捷径,和如何解决问题的明确说明。同时,它的哲学是试着让你保持自己的思想,尽可能的在框架范围之外进行工作。
本书的目标是使你成为Django开发专家,关注的焦点主要有两方面:一是深入解释DJANGO能做什么及及怎样用它构建WEB应用程序,二是在适当的地方讨论了一些高级概念,并说明如何高效将这些工具应用在你的项目中!通过阅读本书,你会尝到快速开发一个WEB站点的技巧,并且保持代码的清晰和易于维护。
什么是WEB框架?
DJANGO是新型优秀的WEB框架之一,那么具体这句话是什么意思呢?
要回答这个问题,让我们考虑一下不用框架,用PYTHON进行WEB应用的设计。贯穿本书,我们都将使用这种方法:向你展示,不用捷径,用基本的方式进行工作。为什么捷径如此有帮助。(同时对于不用框架进行工作时的认识原理也是有帮助的,因为框架并不总是有用,并且更重要的是能知道为什么按照这种工作方法会让你成为一个好的WEB开发者)
从设计稿构建一个PYTHON WEB应用最简单的方式是,也是最直接的方法是使用CGI(Common Gateway Interface)标准,大约在1998年,这种技术非常流行。它的详细解释是:只需要创建一个输出HTML的PYTHON脚本,然后把脚本保存到WEB服务器,扩展名为“.cgi”,然后在WEB浏览器中进行访问即可。
下面是一个PYTHON CGI脚本的例子,它从数据库中读取最近发行的十本书名并进行显示:
#!/usr/bin/env 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结束标签,关闭数据库连接。
像这样的一次性页面,从设计稿开始编写的方式并不一定差。因为这的代码简单易读,即使一个初学者也从头到尾的读懂这些代码,并理解这些代码都做了些什么。并且没有其它东西需要了解,也不需要读其它的代码。部署也很简单:保存这些代码到一个CGI为扩展名的文件中,并上传到WEB服务器,然后在浏览器中访问这个页面。
但是,尽管这种方式看似简单,却有许多恼人的问题,好好问一下自己下面这些问题:
当应用中有多个地方需要连接数据库时会发生什么?确保数据库连接代码不需要在每个脚本中重复,一个方法是将那些代码放一个共享的函数中进行重构。
一个开发者真的应该关注比如打印“Content-Type”行,记得关闭数据库连接这样的事情吗?这种方式会降低程序员的效率,并提高出错机率。这种可配置的相关任务最好放在一些共用的基础结构中进行处理。
当这些代码被重用在多个相同环境中,每个环境都有自己的数据库和密码,这时会发生什么?一个字符错误都会导致整个应用崩溃。理想情况下,页面逻辑,也就是从数据库中获取书名的部分,应该从页面的HTML显示部分分离,这样设计人员也可以编辑页面而不会对开发人员造成影响。
以上这些问题就是一个WEB框架要解决的。一个WEB框架提供了一个程序的基础架构,让你能集中精力编写清晰/可维护的代码,而不用重造车轮。简言之,这就是DJANGO所做的。
MVC的设计模式
接下来通过一个例子,演示了前一种方法与使用WEB框架的方法之间的区别。它展示如何用DJANGO写出与前面的CGI功能相同的代码。一共分为四个文件:
# models.py (the database tables)
from django.db import models
class Book(models.Model):
name = models.CharField(max_length=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语句。
views.py文件包含了页面的业务逻辑。latest_book()方法被称为视图(VIEW)
urls.py文件指定了对于一个给定的URL哪一个视图会被调用。在本例中,URL /latest/将被latest_books()方法处理。换句话说,如果你的域名是example.com,那么任何访问http://example.com/latest/的请求都将调用latest_book()方法。
latest_books.html文件是一个描述了页面设计的HTML模板。它使用了模板语言的基本逻辑语句,例如:{% for book in bool_list %}
综上所述,这些都是完全遵循一种称为 模型-视图-控制器(MVC)的模式,简单说来,MVC是一种开发软件的方法,这种方法可以让定义和访问数据库(即模型)的代码从处理用户请求的逻辑中分离(控制器),也与用户界面相分离(视图)。
这种方式的主要优点是各个组件之间是松散耦合的。由DJANGO开发的WEB应用中每个不同的部分都有一个主要目标,每个部分都可以在不影响其它部分的前提下进行修改。例如,开发者可以在毫不影响应用其它部分的情况下修改URL部分,而设计人员可以在不必接触PYTHON代码的情况下修改页面HTML代码,数据库管理员可以只在一个地方对数据库表进行修改,而不用查找替换一堆的文件。
本书中,MVC的每一部分都有一章进行讲解,第三章讲视图,第四章讲模板,第五章讲模型,在第五也深入讨论了DJANGO的MVC哲学。
DJANGO历史
在开始研究代码之前,我们还是花点时间了解一下DJANGO的历史。我们将向你演示在不使用捷径的情况下如何完成上面所提到的功能,以便你能更全面的理解捷径。同样对于理解DJANGO的产生也是有益的,因为这些历史背景会影响DJANGO的工作方式。
如果你已经做过一段时间的WEB应用开发,你可能会熟悉我们之前例子中提到的在CGI中的的问题。经典的WEB开发流程可能会是这样的:
1.从设计稿中写出一个WEB应用
2.从设计稿中写出另外一个WEB应用
3.认识到在第一步中写的WEB应用中可以与第二步中写的WEB应用共享一些东西
4.重构代码,以便应用一可以与应用二共享一代码
5.重复几次第一步到第四步
6.认识到你在发明一个框架
DJANGO就是如此产生的!
DJANGO最初产生于一个真实应用,它由美国Kansas州Lawrence的一个开发团队编写,在2003年的秋天,Adrian Holovaty和Simon Willison在当地一家日报社从事WEB程序员的工作,并使用PYTHON进行应用开发!
World Online团队负责几家当地新闻站点的开发和维护,由于新闻行业的时效性使开发环境蓬勃发展,对于这些站点,包括LJWorld.com,Lawrence.com和KUsports.com,记者和管理要求一个应用必须在的时间被构建出来,通常是几天或数小时。故此,Simon和Adrian开发出了一个节省时间的WEB开发框架,它已经走出了最初需求,并且这也是唯一的能在极短时间内构造出一个可维护的应用的方法!
2005年的夏天,世界上的许多站点使用这个框架开发出了高效且功能强大的站点,此时团队成员,包括Jacob Kaplan-Moss,决定将此框架发布为开源软件。他们在2005年的7月发布并命名为DJANGO,名字来自于一个爵士乐演奏者:Django Reinhardt。
这些历史是有关系的,因为它主要解释了两件事情:一是DJANGO的亮点。因为DJANGO产生于新闻环境中,所以它提供的特性(例如管理界面,第六章会讲解)特别适合于内容内容类站点,例如Amazon.com,craiglist.org和washingtonpost.com,这些站点都提供了以数据库驱动的动态信息。过千万不要局限于此,尽管DJANGO特别适合于开发这一类站点,但是这一点也不妨碍它成为开发一个有效的工具进行任一类型的动态站点开发。(在某一方面特别擅长,并不表示就不擅长于其它方面)
二是DJANGO的起源所形成的开源社区文化。因为DJANGO来自于真实世界,而不是作为学术练习或商业产品,因此它的主要上的是解决WEB开发中的问题,这也是DJANGO开发者所面对的。结果,DJANGO改进了它们的每日工作,框架的维护者将精力集中于确保DJANGO能节省时间,构建一个易维护,在高负载下性能优异的应用。这些开发者目的明确,就是极力希望能节省自己的时间,并能喜欢自己的工作(说的直白点是自产自销)。
如何阅读本书
在写本书时,我们试图在可读性和参考书之间进行平衡,但是更倾向于可读性。我们写本书的目标是,作为初学者,通过阅读本书可以成为一个DJANGO专家,并且我们相信讲授的最佳方式就是理论与大量实践的结合,而不是提供一个详尽但却乏味的DJANGO特性讲解。(正如所说,你不能期望教人一门语言时只教它字母)
基于此,我们建议你依次从第一章读到第七章。它们形成了如何使用DJANGO的基础,一旦你读完这些,你就能够构建一个功能强大的DJANGO站点。其余章节,主要集中于DJANGO的一些特性,按任意顺序阅读都可。
附录是参考部分,与DJANGO的免费文档一块,可能会在需要的时候,作为一种语法提示或快速参考。
需要的编程知识
本书的读者应该能理解基本的面向过程和面向对象编程的知识:控制流结构(如:if,while等),数据结构(列表,哈希,字典),变量,类和对象等。
如果有WEB开发的经验,会更加有益,但是并非必需。贯穿本书,我们会为那些在WEB开发方面缺少经验的读者进行补习。
PYTHON知识需求
DJANGO是由PYTHON编程语言所写的一堆类库集合,要使用DJANGO进行站点开发,你可能需要使用这些类库编写PYTHON代码,因此,学习DJANGO,实际上是学习如何用PYTHON进行编程,并理解DJANGO的类库是如何工作的。
如果你有PYTHON编程的经验,你将毫不费力。实际上,DJANGO并不会玩转魔术,对你来说,学习DJANGO将主要是学习它的约定和API的用法。
如果你没有PYTHON编程经验,你就要学习它了,它很容易学习和使用的!尽管本书不是一本完整的PYTHON指南,但是还在一些适当的地方讲解了PYTHON的特性和功能,特别是当代码不眼看透的时候。然而我们还是强烈建议你读一下PYTHON的官方指南,地址为:http://docs.python.org/tut/。也建议你读读Mark Pilgrim的书:Dive Into PYTHON:http://www.diveintopython.org/。
DJANGO版本要求
本书包括DJANGO 1.x的发行版本:1.0,1.0.2,1.1。
DJANGO的开发者保持主版本号的向后兼容。意思是,如果你用DJANGO 1.0写了一个说应用,那么它将也可以正常工作在1.1,1.2,1.9以及任何其它以1.开头的版本。
一旦DJANGO达到2.0,那么你的应用可能需要重写,但是2.0还很遥远,因此1.0的发布大概就经历了3年多的时间(这一点与PYTHON本身的兼容策略相似:用PYTHON2.0写的代码可以工作在PYTHON2.6上,但是不一定能工作在PYTHON3.0上)
本书给定版本为DJANGO1.x,它应该可以让你用上一段时间了!
获取帮助
DJANGO的最大益处之一是它有一个友好互助的社区。它的帮助包含DJANGO的方方面面:从安装,到应用设计,到数据库设计,到部署,免费在线发问。
DJANGO用户邮件列表包含数千用户,随时可以问或答,免费注册地址:http://www.djangoproject.com/r/django-users
DJANGO的IRC通道,DJANGO用户可能用此进行实时交流和互助。若要加入,请登陆Freenode IRC网络,找DJANGO
接下来
在下一章,我们将开始DJANGO的学习,主要包括DJANGO的安装和初始化。
Django Book 中文翻译版(第二版) 第一章
最新推荐文章于 2024-11-02 22:15:39 发布