Fork me on GitHub
每周一荐:Python Web开发框架Django

作  者:david++
发布时间:2012/08/09 22:40
文章地址:http://game-lab.org/?p=357

花了两周时间,利用工作间隙时间,开发了一个基于Django的项目任务管理Web应用。项目计划的实时动态,可以方便地被项目成员查看(^_^又重复发明轮子了)。从前台到后台,好好折腾了一把,用到:HTML、CSS、JavaScript、Apache、Python、mod_wsgi、Django。好久不用CSS和JavaScript了,感到有点生疏了,查了无数次手册。后台Django开发环境的搭建也花了不少时间和精力。记录下来,免得以后走弯路。同时给大家推荐一下Django框架,如果你想非常快速地编写自己的web应用,可以考虑使用Django,同时Django还会给你提供一个功能强大的后台管理界面。

Django是一个开源的Web应用框架,由Python写成。采用MVC的软件设计模式,主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don’t Repeat Yoursef)。在Django中Python被普遍使用,甚至包括配置文件和数据模型。它可以运行在启用了mod_python或mod_wsgi的Apache2,或者任何兼容WSGI(Web Server Gataway Interface)的Web服务器。

1. Django的快速开发

  • 第一步(Model):设计自己的数据模型。
  • 第二步(View):创建网页模板。Django自己的Html模板语言,非常容易将数据和模板结合起来,创建动态页面。
  • 第三步(Control):定义URL,提供服务和控制。
 

2. Django开发环境的搭建

Django可以运行在任何遵守WSGI的Web服务器上。本文主要介绍Apache2+mod_wsgi+Django的环境搭建。所需要的软件如下:

  1. Apache2:Web服务器
  2. Python2.x:Python语言支持
  3. mod_wsgi:Apache的WSGI模块,有了该模块的支持,就可以用Python做为CGI脚本来编写网络应用(之前还有一个mod_python,在Apache官网上发现mod_python已经过时,渐渐要被mod_wsgi替代,据说mod_wsig性能要好一些)
  4. Django:一个强大的Python Web开发框架,本文的主角。

 

2.1 Apache的安装

下  载:http://httpd.apache.org/download.cgi (选择版本2.2.22,mod_wsig暂不支持2.4.2)
解压缩 :$tar xvfz httpd-NN.tar.gz
$cd httpd-NN
编译配置:$./configure –with-included-apr –prefix=PREFIX #with-included-apr选项指定使用apache软件包里面的apr库
编  译:$make
安  装:$make install
配  置:$vim PREFIX/conf/httpd.conf
测  试:$PREFIX/bin/apachectl -k start
参  考:

 

2.2 Python的安装

下  载:http://www.python.org/getit/releases/2.7.3/(选择2.X版都可以,3.0暂不支持)
解压缩 :$tar xvf python-X.tar
$cd python-Y
编译配置:$./configure –enable-shared –prefix=PREFIX #–enable-shared选项指定生成python的动态库
编  译:$make
安  装:$make install
测  试:$python
参  考:

 

2.3 mod_wsgi模块的安装

下  载:http://code.google.com/p/modwsgi/ (选择3.3版本)
解压缩 :$tar xvfz mod_wsgi.X.Y.tar.gz
$cd mod_wsgi.X.Y
编译配置:$././configure –with-apxs=/usr/local/apache2/bin/apxs –with-python=/usr/local/bin/python # 指定Apache2的模块编译程序和Python解析器
编  译:$make
安  装:$make install
测  试:$python

2.3.1  配置Apache(修改/usr/local/apche2/confi/httpd.conf)

# 加载wsgi模块
LoadModule wsgi_module modules/mod_wsgi.so
....
# HTTP请求处理脚本
WSGIScriptAlias /test  /home/xxx/www/test.wsgi
<Directory "/home/xxx/www">
Order allow, deny
Allow from all
</Directory>

2.3.2 编写test.wsgi(WSGI标准:http://www.python.org/dev/peps/pep-3333/

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

2.3.3  重启apche2

在任意网络浏览器中输入:http://www.mysite.com/test。看到“Hello World!”,恭喜你成功安装了WSGI模块。

参  考:

 

2.4 Django的安装

下  载:https://www.djangoproject.com/download/ (选择1.4版本)
解压缩 :$tar xvfz Django-1.4.tar.gz
$cd Django-1.4
安  装:$python setup.py install
测  试:
$python
>>> import django
>>> print(django.get_version())
参  考:

 

3. Django中文支持

Django使用的是UTF-8编码,所以对于国际化支持不成问题。因为初次玩Django,中文显示乱,折腾死人了(一直在用的的mysql默认字符串是latin1编码,vim默认保存的文件编码为ascii)。最终得出结论,如果中文显示乱码,或者Django报错(… unicode …blabla…),请检查:

  1. Django的设置。打开自己项目的settings.py,LANGUAGE_CODE=”zh_CN” ?FILE_CHARSET=’UTF-8′ ?DEFAULT_CHARSET=’utf-8′?
  2. 查看自己项目所有的文件编码是否以UTF-8编码保存的?确保.py文件第一行要加上:#-*-  coding:utf-8 -*- ?
  3. HTML模板文件head部分,添加<meta http-equiv=“Content-Type” content=“text/html;charset=utf-8″/>
  4. 检查自己项目的数据库字符串编码是否为UTF-8,命令如下:
    查看:
    show create database dbname;
    show create table tablename;
    show full columns from tablename;
    创建:
    create database dbname CHARACTER SET utf8;
    create table tblname CHARACTER SET utf8;
    修改:
    alter database dbname CHARACTER SET = utf8;
    alter table tablename CONVERT TO CHARACTER SET utf8;

 

4. Django应用的部署

Django应用的运行有两个方式,一种是在开发阶段,使用创建项目下面的manager.py runserver ip:port来启动一个用Python实现的轻型web服务器;另外一种就是通过mod_wsgi将你自己的应用部署到生产环境,对外提供服务。下面简单介绍一下Django的部署(虚拟主机上的配置,自行参考文档)。

假设你创建的Django项目文件列表如下:

my-site
|- my-site
|- myapp
    |-static
    |- ...
|- static
    |- css
    |- js
    | ...
|- apache
|- ...

4. 1. 创建Django项目的wsgi脚本(my-site/apache/django.wsgi),内容如下:

import os, sys

sys.path.append('/.../www/')
sys.path.append('/.../www/my-site')
os.environ['DJANGO_SETTINGS_MODULE'] = 'my-site.settings'
os.environ['PYTHON_EGG_CACHE'] = '/.../www/.python-eggs'

import django.core.handlers.wsgi

_application = django.core.handlers.wsgi.WSGIHandler()

def application(environ, start_response):
    if environ['wsgi.url_scheme'] == 'https':
        environ['HTTPS'] = 'on'
    return _application(environ, start_response)

4.2. 配置Apache(httpd.conf),内容如下:

# 请求访问www.xxx.com/的时候,转到django.wsgi
WSGIScriptAlias / /.../www/my-site/apache/django.wsgi

<Directory /.../www/my-site/apache>
Order deny,allow
Allow from all
</Directory>

# 静态文件的访问路径配置
Alias /static/ /.../www/my-site/static/

<Directory /.../www/my-site/static>
Order deny,allow
Allow from all
</Directory>

4.3. 配置setting.py

  • EBUG=False
  • 自定义404.html,500.html模板(网页未找到、服务器内部错误)

4.4. 静态文件

  • STATIC_ROOT = ‘/…/www/my-site/static/’
  • STATIC_URL = ‘/static/’
  • $./manager.py collectstatic
注意:开发阶段,一般都会把相应app的静态文件,放在app目录下的static目录下。在正式生产环境部署的时候,使用./manager.py collectstatic来把所有静态文件收集到STATIC_ROOT指定的位置,包括管理后台的。

4.5. 重启apahce

浏览器输入相应的URL地址,看到你自己的web应用界面的话,恭喜大功告成!

 

5. 总结

本文主要介绍了一下Django开发环境的搭建、Django应用的部署和中文乱码的解决方法。具体如何使用Django快速地创建自己的web应用,并没有提及。Django相对来说,文档比较齐全,加上官方推出的一本书:《The Django Book》,相信只要开发环境搭建好,创建自己的Web应用也会非常容易。

进一步学习Django,请看:

  1. Django1.4文档:https://docs.djangoproject.com/en/1.4/
  2. Django Book 英文版:http://www.djangobook.com/en/2.0/
  3. Django Book 中文版:http://djangobook.py3k.cn/2.0/
 

Z-My::每周一荐

 
摘要: 作 者:david++发布时间:2012/08/09 22:40文章地址:http://game-lab.org/?p=357花了两周时间,利用工作间隙时间,开发了一个基于Django的项目任务管理Web应用。项目计划的实时动态,可以方便地被项目成员查看(^_^又重复发明轮子了)。从前台到后台,好好折腾了一把,用到:HTML、CSS、JavaScript、Apache、Python、mod_wsgi、Django。好久不用CSS和JavaScript了,感到有点生疏了,查了无数次手册。后台Django开发环境的搭建也花了不少时间和精力。记录下来,免得以后走弯路。同时给大家推荐一下Django.阅读全文
posted @ 2012-08-09 22:45 david++ 阅读(574) | 评论 (2) 编辑
 
摘要: 作 者:david++发布时间:2012/07/05 21:30有空的时候就喜欢拍一些照片,虽然技术不怎么样,但往往辛苦得来的照片,不忍心丢失,所以会隔一段时间将照片备份到NAS(网络存储)。电脑上的照片,闲暇的候翻看的时候,也可能会修改一些照片(PS、裁剪等)。备份的时候,直接把照片目录(Photos)直接复制过去,久而久之,照片的数量越来越多,甚至一个电脑的硬盘都装不下了,复制的代价越来越大,加之对NAS的访问只通过WIFI,所以备份将是一个非常耗时的事情。TC(Total Command,下面都以TC简称)的“Sychronize Dirs”功能,是在无意间发现的,该功能可以对比两个文.阅读全文
posted @ 2012-07-05 21:37 david++ 阅读(1035) | 评论 (7) 编辑
 
摘要: 作 者:david++发布时间:2012/06/08 09:02文章地址:http://game-lab.org/?p=320近两个月都在学习ACE,一个超级强大,也超级复杂的网络框架库。对ACE的大名早有听说,同时也听说过它的复杂性,所以一直不敢去碰它。ACE对程序员的要求是比较高的了,需要对C++、设计模式、POSA、网络、并发等有一定的了解后,才能去碰它。不然真的是一头扎进茫茫大海,越看越复杂,直到消磨完所有对ACE的热情。经过两个月的摸索,查找各种资料,最后也总算是知道了该如何去学习这个Ace(王牌)基本的ACE,以后有所心得,也会即时在博客上予以分享。下面推荐几本学习ACE必备的工.阅读全文
posted @ 2012-06-08 09:06 david++ 阅读(1266) | 评论 (6) 编辑
 
摘要: 喜欢数学的人,都说数学公式是世界上最简洁而深刻的诗,数学曲线是世界上最美的图画。本周给大家推荐一个开源的函数曲线绘制工具:gnuplot。别小看这个工具,年龄和我一般大,gnuplot 是在 1986 年由 Colin Kelley 和 Thomas Williams 最初开发的。许多参与者都在为不同的“终端”创建变种方面做出了贡献。在 1989 和 1990 年,这些变种被合并到 gnuplot 2.0 中。2004 年 4 月,发布了 4.0 版本。前缀gnu千万不要误解和Linux世界的GNU有关系,只是一个巧合,gnuplot被开发出来的时候,GNU不久才诞生。Gnuplot 是一种免阅读全文
posted @ 2012-05-17 21:37 david++ 阅读(929) | 评论 (0) 编辑
 
摘要: 无意中发现了一个外观酷酷的代码编辑器:sublime,起初还以为就是一“花瓶”。网上随便搜了下,sublime原来还是比较强力的(据说想要干掉Mac下面的TextMate)。MacOS、Linux、Windows平台下都可以使用,支持各种插件。做为一个文本编辑软件,sublime给我的感觉是,它有许多非常有创意的操作,并且感觉很流畅,用着很舒服,界面也很简洁、美观。如:快捷的命令面板(Ctrl+Shift+P)、快速文件切换(Ctrl+P)、文件小地图、VIM模式、随心所欲地跳转和多重选择。现在对于这种可以任意定制的软件越用越感觉爽了,起初就一及其简单的界面,岂不知背后蕴藏着无穷的技巧和可扩展阅读全文
posted @ 2012-05-10 21:24 david++ 阅读(184) | 评论 (0) 编辑
 
摘要: 上周给大家推荐了流编辑器sed,用sed其实已经可以干很多事情了。批量替换文件,批量查找指定的模式,支持单行和多行模式。但通过”sed单行脚本快速参考“可以看出,sed写出来的脚本可读性很差,有些甚至非常难以理解,特别是对于那些对sed的用法不是很熟悉的人来说,看起来简直像一堆毫无意义的字符乱码。脚本写出来不是给自己看的,也要考虑到后续的维护。有没有更好的方式来做同样的事情,甚至比sed能干更多的事情了。awk登场了,它的语法类似与C,写起来非常方便并且非常容易理解,提供了许多系统变量、字符串处理函数、数值运算函数、美化输出函数,甚至可以自己定义函数。能想到的文本分析,AWK貌似都能搞定。下面阅读全文
posted @ 2012-04-27 06:06 david++ 阅读(1712) | 评论 (1) 编辑
 
摘要: 电影:《生命之树》《生命之树》由泰伦斯·马力克导演。故事开始于一个1950年代,生活在美国中西部的家庭的杰克在童年时收到双亲两种矛盾的教育。成年后的杰克渐渐迷失了自己,发现他在现代社会失去了灵魂,他寻觅生命的原初以及意义的答案,拷问信仰的存在,最终明白了生命的真谛。故事讲述生长在美国中西部的11岁少年杰克的成长变迁。他的家庭由父母和三兄弟组成。在一个孩子眼中,起初一切都是新奇的。他从母亲身上看到了慈爱,而他的父亲告诉他,这个世界的生存法则就是把自己放在首位。在成长过程中,杰克竭力想要调和双亲相悖的人生观。故事开始于一个50年代,生活在美国中西部的家庭,电影跟随着大儿子杰克的生命展开,阅读全文
posted @ 2012-04-13 08:00 david++ 阅读(30) | 评论 (0) 编辑
 
摘要: 书籍:《面向模式的软件架构IV:分布式计算的模式语言》简介迄今为止,人们提出的软件开发模式有不少是关于分布式计算的,但人们始终无法以完整的视角了解分布式计算中各种模式是如何协同工作、取长补短的。构建复杂的分布式系统似乎成为了永远也无法精通的一门手艺。本书的出版改变了这一切。本书是经典的POSA系列的第4卷,介绍了一种模式设计语言,将分布式系统开发中的114个模式联系起来。书中首先介绍了一些分布式系统和模式语言的概念,然后通过一个仓库管理流程控制系统的例子,介绍如何使用模式语言设计分布式系统,最后介绍模式语言本身。使用这一模式语言,人们可以有效地解决许多与分布式系统开发相关的技术问题,如★ 对象阅读全文
posted @ 2012-04-06 01:13 david++ 阅读(76) | 评论 (0) 编辑
 
摘要: 来自:http://game-lab.org/?p=207书籍:《重构:改善既有代码的设计》简介Martin Fowler和《重构:改善既有代码的设计》(中文版)另几位作者清楚揭示了重构过程,他们为面向对象软件开发所做的贡献,难以衡量。《重构:改善既有代码的设计》(中文版)解释重构的原理(principles)和最佳实践方式(best practices),并指出何时何地你应该开始挖掘你的代码以求改善。《重构:改善既有代码的设计》(中文版)的核心是一份完整的重构名录(catalog of refactoring),其中每一项都介绍一种经过实证的代码变换手法(code transformatio阅读全文
posted @ 2012-03-30 08:21 david++ 阅读(36) | 评论 (0) 编辑
 
摘要: 来自:http://game-lab.org/?p=181书籍:《程序设计语言原理》豆瓣:http://book.douban.com/subject/3119946/【简介】本书从为什么学习程序设计语言入手,深入细致地讲解了命令式语言的主要结构及其设计与实现,内容涉及变量、数据类型、表达式和赋值语句、控制语句、子程序、数据抽象机制、支持面向对象程序设计(继承和动态方法绑定)、并发和异常处理等方面。最后两章介绍了函数式程序设计语言和逻辑程序设计语言。【笔记】作为一个程序员,一般只有精通一门程序设计语言就可以胜任当前的工作了。当往往进入一个新的项目,或者重新选择一份工作,或者自己发现当前的所使用阅读全文
posted @ 2012-03-30 08:18 david++ 阅读(456) | 评论 (1) 编辑
 
摘要: 2010/01/01 20:00 by David ShangHai【Movie: 《Inception(盗梦空间)》】 有时会感觉到自己的不真实,也许我们就在一个梦的世界里面,等着某年某月某日死去的时候,一觉醒来!发现原来是做了个梦!也许一觉醒来的时候,其实我们还在梦里... 《盗梦空间》又名《奠基》。是大导演克里斯托弗·诺兰继《蝙蝠侠前传2:黑暗骑士》后再次给我们带来的惊喜,本片将带观众游走于梦境与现实之间,被定义为''发生在意识结构内的当代动作科幻片”。 由莱昂纳多·迪卡普里奥和奥斯卡影后玛丽昂·歌迪亚主演。7月16日在北美正式上映的《盗梦空阅读全文
posted @ 2011-01-01 19:59 david++ 阅读(39) | 评论 (0) 编辑
 
摘要: 祝大家,圣诞快乐!【Software: Google Dictionary】 浏览英文网页时,有个好的翻译工具,往往事半功倍。当然现在有很多词典软件,都是非常好用的,商业软件《金山词霸》,开源的就更多了,如《StarDict》就很不错的。而这些词典一般都会带屏幕划词功能的,鼠标轻轻移到相应的英文单词时,它就会自动弹出翻译后的结果。对看英文网页或书籍,是很有帮助的。 上面说的都是独立的软件,今天要推荐给大家的是Chrome的一个词典扩展应用:Google Dictionary。安装后,在Chrome浏览器的地址栏后面会有一个词典图标,点开后就可以手动敲入药查询的单词。当然也支持划词功能的,只要.阅读全文
posted @ 2010-12-24 22:28 david++ 阅读(41) | 评论 (0) 编辑
 
摘要: 【Music:Pachabel's Canon】 卡农的作者,德国作曲家帕海贝尔(1653-1706),是巴洛克时期相当重要的作曲家,他的音乐影响了音乐之父巴赫。“卡农”是现今为止最受全世界的喜爱的古典音乐作品,曾称霸美国告示牌流行音乐排行榜长达百周以上。据统计,到目前为止世界上重新演绎的卡农版本达2000余种!如果帕海贝尔还在世的话,可能是全世界版税收入最高的音乐家。 卡农”并不是曲子的名字,而是一种音乐曲式,照字面上是“轮唱”的意思。简单说,就是有好几个声部的旋律重复出现,交织着演奏互相追随,让人有无退延伸的感觉。“卡农”全长仅五分钟,旋律简单仆实,却具备精密完美的音乐结构,十足表阅读全文
posted @ 2010-12-18 23:17 david++ 阅读(59) | 评论 (0) 编辑
 
摘要: 【Software:foobar2000】 foobar2000是原Winamp工作组成员Peter Pawlowski 编写的一个专业数字音频播放器。据说是因为他不满于Winamp 2.x的插件体系架构和更倾向于图形、皮肤的发展方向的Winamp3 。 foobar2000最值得关注的在于他良好的体系架构。 除了重要的音频管道以外,播放器所有功能部件均是模块化的。可视化的核心由一个插件提供,即使使用了不同的接口界面。这种程序架构使它成为目前最自由化的音频播放软件,任何人都被允许利用它的接口制作附加功能模块。 主要特性: 1.开放的组件体系结构允许第三方开发者来扩展播放器的功能 2.内置音频格阅读全文
posted @ 2010-12-12 01:44 david++ 阅读(52) | 评论 (0) 编辑
 
摘要: 好的东西,推荐给大家!希望大家每一天都有新的发现!【Software:GooReader】 Google Books里有很多值得一读的好书,不过网页版用户体验做的确实是差了点,不仅有点卡还让你感觉不出是在读一本书。 好在有GooReader,这个Windows下的应用程序可以让你直接搜索Google Books里的图书,并在书架上直接阅读,带有绿色书签的书可以直接阅读,而红色标签的书则表示无法阅读全文(Google Books的限制)。打开一本书之后你可以缩放(不过不一定保证清晰,取决于Google的扫描质量),不过目前无法加书签也无法将一本书加入收藏。 GooReader有免费版和付费版,.阅读全文
posted @ 2010-12-04 22:35 david++ 阅读(93) | 评论 (0) 编辑
posted on 2012-08-10 09:19  HackerVirus  阅读(358)  评论(0编辑  收藏  举报