当前位置: 首页 > 工具软件 > quixote > 使用案例 >

Quixote笔记

苍阳成
2023-12-01

Quixote的部署

    在Quixote官方白皮书中已经详细描述了Quixote的工作模式。Quixote可以使用Python自代的http_server(主要用于开发调试)和与Apache(或lighttpd)配合使用。     Quixote与Apache配合使用方式如下:
  1. 使用CGI,文档中称为egular CGI。被认为效率最低的一种方式,因为每一个请求都会创建一个新的进程。
  2. 使用fastCGI,CGI可以运行fastCGI一定是可以应用的。这也是豆瓣采用的方式。在Quixote作者的一个PPT中,他认为fastCGI是buggy的。哦:(也不至于啊。我们正在寻找使用fastCGI的部署经验。
  3. 使用mod_python,将python代码嵌入到Apache中。
  4. 使用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 python-scgi python-quixote
  • Apache的配置,添加配置到apache.conf。(有些教程中加入了SetHandler scgi-handler ,但这个加上就很本不会和3000通信。可能是版本的问题。最好不用。)
      < Location  "/qx" >            SCGIServer localost:3000            SCGIHandler On       </ Location >  
  • 重启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          <html> 13          <head> 14          <meta http-equiv="Content-Type" content="text/html charset=UTF-8" /> 15          <title>第一个例子</title> 16          </head> 17          <body> 18          <h1>第一个例子有中文!</h1> 19          </body> 20          </html> 21           """ 22 
  • 现在在浏览器中输入http://localhost/qx就可以看到结果了。
  • 除了运行上面的python脚本,也可以采用这样的方式运行scgi:
    python /var/lib/python-support/python2 .5 /quixote/server/scgi_server.py /     --factory = FirstApp.create_publisher /     --script-name = /qx  --port = 3000

Quixote 中文化的要点

    Quixote的中文设置好像很麻烦。其实随着python、Quixote版本的推进,现在这个问题已经很简单了。字符集使用的是utf-8。使用gb2312可能也是可以的。
  1. 所有源代码使用utf-8在程序的开始加上# -*- coding: utf-8 -*-
  2. ptl的html模板加上content="text/html charset=UTF-8"
  3. 关键:在quixote的安装路径下有__init__.py,将其中的DEFAULT_CHARSET = 'iso-8859-1'改成 'utf-8'
  4. 也可以不修改__init__.py,使用Publisher的时候把Publisher扩展一下:
1  class  UTF8Publisher(Publisher): 2      quixote.DEFAULT_CHARSET  =   " utf-8 "
 类似资料: