.. include:: ../LINKS.rst Django 网页框架 =============================================================================== 小白在经历过写通讯录软件、网页服务和手机APP后,对Python的应用已经非常熟悉了。 小白琢磨着,自己已经快毕业了,何不用Python来帮助自己创业呢?用Python做些什么好呢?小白曾经给EPTCO Inc. 做过搜索引擎优化和用户体验研究。将Python与自己的兴趣和工作经历结合再一起,才能更大可能地创业成功。小白下定决心,“我要做Python程序员中的搜索引擎优化和用户体验专家;要做用户体验研究员中的编程大牛!” 小白在做搜索引擎优化时,经常会用到一些网页服务,比如在线查询Page Rank,目录收录情况,Alexa排名查询等。小白想,“何不用Python来实现这些服务呢?让更多的朋友可以受益。” “说做,咱就做呀!”小白开始在Bing.com和Baidu.com等搜索引擎查找"Python web framework"和“python web 框架”。经过搜索,小白发现,Python有名目繁多的web框架,如django,Pylons, TurboGears , Zope, web2py, Bottle等。其中,Django是被提及次数最多,受许多人欢迎的框架。Django被称为"时间有限的完美主义者的web框架"(The Web framework for perfectionists with deadlines)。根据这些评价,小白认为,使用Django应该开发很快,也会有很多同道中人。小白决定,先去安装一个Django来试试身手。 安装Django ----------------------- 小白打算在自己的windows操作系统下安装和开发Django网站。根据以往的经验,小白已经很熟悉Python库的安装了。打开cmd命令行,输入easy_install django,很简单的就完成了django的安装。 下面是小白安装Django的过程。 :: C:\Users\He Jibo>easy_install django Searching for django Best match: Django 1.2.5 Adding Django 1.2.5 to easy-install.pth file Using c:\python25\lib\site-packages Processing dependencies for django Finished processing dependencies for django 如果您的电脑里没有安装easy_install这个库,强烈建议您搜索easy_install,并安装它。有了easy_install,可以让您安装Python的库更轻松。 如果您不喜欢easy_install,您也可以搜索django,下载到本机,解压缩后,在cmd命令行下输入python setup.py install进行安装。 安装完后,检查一下是否正确安装吧。先在cmd命令行中输入python,然后import django以导入django这个库。 如下所试。嗯!Python没有报告错误,说明Django已经成功安装了。 :: C:\Users\He Jibo>python ActivePython 2.5.5.7 (ActiveState Software Inc.) based on Python 2.5.5 (r255:77872, Jan 31 2010, 15:49:35) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import django >>> 至此,小白已经成功地在windows操作系统中配置好Django开发环境了。 读者,“那么,怎么在linux,比如ubuntu下面安装Django呢?”。 小白说,“我也不太清楚linux用户怎么安装的。不过听说每个linux用户都是天使,没有他们做不到的事情。比如,ubuntu下,在terminal(终端)中输入sudo aptitude install python-django就可以了安装好Django了。” 创建Django工程 ----------------------- Django提供了很强大的工具,以快速地开发网站。 小白先在C:盘下新建了一个django-pr的文件夹,用户存放Django工程的所有文件。以后所有的操作 都是在C:\django-pr\这个路径中完成的。 Django提供了django-admin这个工具来创建项目目录。在cmd命令行中输入下面的命令: django-admin startproject ueseo 其中,ueseo为工程名字。您也可以取其它的名字。小白把它的工程命名为ueseo,因为ueseo是用户体验(user experience)和搜索引擎优化(search engine optimization)的英文的缩写。在网站的域名中包含搜索关键词,对搜索排名有非常大的帮助。 小白发现,ueseo目录下有4个文件: :: __init__.py 表示这是一个Python的包 manage.py 可执行文件。用于项目管理的简便工具,可以自动处理DJANGO_SETTINGS_MODULES和PYTHONPATH。 settings.py Django的配置文件 urls.py 处理URL映射 小白不由惊叹,“哇!Django真强大。我只运行了一个命令,就已经完成这么多代码了。”小白听说,它的这个工程已经可以运行了。 不信?启动Django自带的web服务器看看吧! 启动Web服务器(Web Server) --------------------------------------------------------------------- ueseo文件夹下的manage.py文件是用来管理项目的,包括启动web服务器。小白在命名行中输入 :: python manage.py runserver 得到了下面的反馈信息。 :: C:\ueseo>python manage.py runserver Validating models... 0 errors found Django version 1.2.5, using settings 'ueseo.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK. 小白根据提示,用浏览器访问http://127.0.0.1:8000/这个网址。小白很开心地看到了“It worked!”。 仅仅一行命令,Django就成功地生成了一个可以访问的页面。 .. image:: ../_static/snap/django_itworks.png 图1. Django成功建立工程后的显示内容。(It worked!) 第一个网页,Hello,Django! --------------------------------------------------------------------- 接着,小白打算写自己的第一个Django网页。 小白在ueseo目录下新建立pagerank.py文件(因为小白的最终期望是写一个查询Page rank的网页服务,所以文件命名为pagerank.py 您也可以取其它您喜欢的名字)。 小白在pagerank.py中输入了下面的代码。这段代码的功能是生成一个显示“Hello, Django!”的页面。 :: from django.http import HttpResponse def index(request): return HttpResponse('Hello, Django!') 小白还需要配置网址。小白打开urls.py文件,里面已经有的代码提示如何配置网址。小白细读了urls.py, 明白了网址配置的方法后,将urls.py的内容替换为如下的代码: :: from django.conf.urls.defaults import * urlpatterns = pattern('', (r'^$', 'ueseo.pagerank.index'), ) 上面的代码中,r'^$'是一个匹配空字符串的正则表达式,当访问http://127.0.0.1:8000/时就会调用pagerank.py模块中的index方法。 小白重新启动web服务器。访问http://127.0.0.1:8000/,成功地看到了Hello, Django!。第一个网页已经做成功了。 Django的模板系统(Templates) --------------------------------------------------------------------- 上面的Hello, Django示例虽然简单,可是生成的页面也过于简单,也不太美观。怎么才能让页面更漂亮呢? 小白发现,Django提供了很好的模板系统(Templates)来解决这个问题。在页面模板中,可以通过js和css代码使页面 更美观。此外,模板系统让html代码和Python代码分离,使代码更易读和维护。 首先,小白在ueseo目录下新建了一个叫templates的文件夹,用来存放模板文件。 然后,小白打开settings.py,找到TEMPLATE_DIRS,进行如下修改,用户指定模板存放的位置。 :: TEMPLATE_DIRS = ( './templates', ) 接着,小白在ueseo/templates/目录下创建pagerank.html,内容如下: :: .. literalinclude:: ../../src/6_others/django/ueseo/templates/pagerank.html 在Django的模板中,{% %}表示代码调用,{{ }}表示变量引用。比如,上面代码中的{{ pagerank }},当传入pagerank的值时, {{ pagerank }}就会被替换成传入的值。 随后,小白在pagerank.py里面增加了下面的代码。这段代码向pagerank.html传入一个url和对应的pagerank值。 :: def PRtemplate(request): url='http://www.ueseo.org' pr=3 return render_to_response('pagerank.html', {'url': url, 'pagerank':pr, }) 最后,小白还需要为新的函数PRtemplate配置网址。小白在urls.py里增加了(r'^template/$', 'ueseo.pagerank.PRtemplate'),这行代码。 当用户访问http://realdomainname.com/template这个网址时,就会调用PRtemplate函数。 小白重新启动web服务器。访问http://127.0.0.1:8000/template/就可以看到他基于模板做的页面了(如图2所示)。 .. image:: ../_static/snap/django_template.png 图2. Django模板系统示例 查找Page Rank的网页 ---------------------------------------------- 上面的代码已经很接近小白想做的page rank查询功能了。不过,小白还需要动态地获取url,并查找一个url对应的page rank。 怎么查找page rank呢?小白打算先找一个可以独立运行的查找page rank的代码。小白使用必应搜索了“python page rank”,发现了 很多个使用python查询page rank的代码。小白把代码复制下来,保存在pageranksearch.py中。源代码如下: .. literalinclude:: ../../src/6_others/django/ueseo/pageranksearch.py 运行pageranksearch.py,就会输出http://www.ueseo.org的page rank。如果要查询其它网页的page rank, 只需要导入pageranksearch中的函数,使用RetPr(url)查询page rank。 经过上面一小节,小白对使用Django制作网页有了更多的认识。他要做的page rank查询网页并不比上面的Hello, Django 复杂多少。将'Hello, Django!'替换成对应的Page Rank值就可以了。 小白在pagerank.py文件中增加了下面的代码: :: def pagerank(request): if 'url' in request.GET: pr = RetPr(url) return HttpResponse('page rank of %s is : %s'%(url,pr)) else: return HttpResponse('please specify the url') 此外,小白还在pagerank.py的首行,加上了from pageranksearch import *,以导入pageranksearch.py中的RetPr函数,用于 计算page rank。 最后,小白在urls.py中增加了(r'^pagerank/$', 'ueseo.pagerank.pagerank'),这一行代码。当用户访问 http://realdomainname.com/pagerank这个网址时,就会调用pagerank函数。 最终的pagerank.py文件内容如下: .. literalinclude:: ../../src/6_others/django/ueseo/pagerank.py 最终的urls.py文件内容如下: .. literalinclude:: ../../src/6_others/django/ueseo/urls.py 小白重新启动web服务器。然后访问http://127.0.0.1:8000/pagerank。页面与图2相似。不过已经完成了查询功能了。 小白在搜索框中输入一个网址,比如www.ueseo.org,就可以查到这个网址对应的page rank。 至此,小白进一步美化pagerank.html这个模板,使得页面更好看。终于完成了page rank查询服务了。小白把 把他的代码布置到网络上,网址为http://www.ueseo.org/pagerank,以使更多的朋友可以受益。