Quixote
Quixote
Quixote是一个基于Python的软件框架,用于开发Web应用。它以简单且灵活的设计为基础,使开发人员能够快速编写应用,并且可以利用广泛可用的第三方Python模块。Quixote的应用通常是一个Python包,即一组组织在一个单一目录树中的模块。Quixote将URL映射到Python包内的一个函数或方法,然后使用HTTP请求的内容调用该函数,并将结果返回给客户端。此外,Quixote还可以作为一个用于开发调试的HTTP服务器,或与Apache(或lighttpd)配合使用的虚拟物质。
正文
在Quixote官方白皮书中已经详细描述了Quixote的工作模式。Quixote可以使用Python自代的http_server(主要用于开发调试)和与Apache(或lighttpd)配合使用。
Quixote与Apache CXF配合使用方式如下:
使用CGI,文档中称为egular CGI。被认为效率最低的一种方式,因为每一个请求都会创建一个新的进程。使用fastCGI,CGI可以运行fastCGI一定是可以应用的。这也是豆瓣采用的方式。在Quixote作者的一个PPT中,他认为fastCGI是buggy的。哦:(也不至于啊。我们正在寻找使用fastCGI的部署经验。使用Mod_Python,将python代码嵌入到apache中。诗 用scgi,这是作者推荐的。使用apache SCGI module scgi_mod将遵循SCGI协议Apache将请求发送到相应的Socket如localhost:3001。而这个Socket由本地运行的一个 Python程序打开。这个Python程序将处理请求,并返回结果。
SCGI的配置
Quixote的网站上对SCGI的描述:SCGI协议是CGI协议的替代。它是一种应用程序与HTTP服务接口标准。它有些像FastCGI但他的设计更容易实现。
配置SCGI过程如下:
安装各个模块不在话下,debian让程序员有了懒惰的美德: #aptitude install libapache2-mod-scgi Pythonscgi python-quixote
apache的配置,添加配置到apache.conf。(有些教程中加入了SetHandler scgi-handler ,但这个加上就根本不会和3000通信。可能是版本的问题。最好不用。) \u003cLocation "/qx"\u003e
SCGIServer localost:3000
SCGIHandler On
\u003c/Location\u003e
重启Apache 配置完成。SCGI的好处在于,修改了Python程序,不用重启Apache,只要重启SCGI就可以了。
第一个Quixote程序
一切就绪,我们来一次Quixote的完整之旅。
scgi程序要求有一个服务打开3000端口。启动scgi的程序如下: 1
2 #!/usr/bin/python
3 # -*- coding: utf-8 -*-
4
5 from scgi.quixote_handler import QuixoteHandler, main
6 from quixote import enable_ptl
7 from quixote.publish import Publisher
8 enable_ptl() #启动PTL
9
10 DEF create_publisher():
11 from ourroot import RootDirectory
12 return Publisher(RootDirectory(), display_exceptions='plain')
13
14 if __name__ == '__main__':
15 from quixote.server import scgi_server
16 scgi_server.run(create_publisher, port=3000, script_name="/qx")
17
程序结构是比较简单的,使用的是scgi_server的run方法。要注意的是run方法中的script_name和前面apache 的配置Location是一样的。程序的关键是导入了ourroot这样一个ptl 。下面是我们的第一个ptl程序。 1
2 # -*- coding: utf-8 -*-
3 """这个是我们第一个例子的根目录
4 """
5 from quixote.directory import Directory
6
7 class RootDirectory(Directory):
8 _q_exports = [""]
9 DEF _q_index [HTML] (self):
10 print "debug message from the index page"
11 """
12 \u003chtml\u003e
13 \u003chead\u003e
14 \u003cmeta http-equiv="Content-Type" content="text/html charset=UTF-8" /\u003e
15 \u003ctitle\u003e第一个例子\u003c/title\u003e
16 \u003c/head\u003e
17 \u003cbody\u003e
18 \u003ch1\u003e第一个例子有中文!\u003c/h1\u003e
19 \u003c/body\u003e
20 \u003c/HTML\u003e
21 """
22
现在在浏览器中输入http://localhost/qx就可以看到结果了。
Quixote 中文化的要点
Quixote的中文设置好像很麻烦。其实随着Python、Quixote版本的推进,现在这个问题已经很简单了。字符集使用的是utf-8。使用gb2312可能也是可以的。
所有源代码使用utf-8在程序的开始加上# -*- coding: utf-8 -*-ptl的HTML模板加上content="text/html charset=UTF-8"关键:在quixote的安装路径下有__init__.py,将其中的DEFAULT_CHARSET = 'iso-8859-1'改成 'utf-8'也可以不修改__init__.py,使用Publisher的时候把Publisher扩展一下:1 class UTF8Publisher(Publisher):
2 quixote.DEFAULT_CHARSET = "utf-8"
参考资料

Warning: Invalid argument supplied for foreach() in /www/wwwroot/newbaike1.com/id.php on line 362
目录
概述
正文
SCGI的配置
第一个Quixote程序
Quixote 中文化的要点
参考资料