WEB开发网
开发学院软件开发Python 使用 Twisted 框架进行网络编程,第 2 部分 阅读

使用 Twisted 框架进行网络编程,第 2 部分

 2008-11-13 13:14:25 来源:WEB开发网   
核心提示: 清单 4. www/Weblog.rpy 动态 Weblog 页面from twisted.web import resource, serverfrom persist import Recordsfrom webloglib import log_fields, TOP, ROW, E

清单 4. www/Weblog.rpy 动态 Weblog 页面

from twisted.web import resource, server
from persist import Records
from webloglib import log_fields, TOP, ROW, END, COLOR
import webloglib as wll
records = registry.getComponent(Records)
if not records:
  records = Records()
  registry.setComponent(Records, records)
class Resource(resource.Resource):
  def render(self, request):
    request.write(TOP)
    odd = 0
    for rec in records.getNew():
      print rec
      hit = [field.strip('"') for field in log_fields(rec)]
      if hit[wll.status]=='200' and hit[wll.referrer]!='-':
        resource = hit[wll.request].split()[1]
        referrer = hit[wll.referrer].replace('&',' &')
        request.write(ROW % (COLOR[odd],referrer,resource))
        odd = not odd
    request.write(END)
    request.finish()
    return server.NOT_DONE_YET
resource = Resource()

一开始会对注册表产生的疑惑是 Weblog.rpy 从未导入它。.rpy 脚本和纯 .py 脚本不完全一样 - 前者在 Twisted 环境 中运行,该环境提供了对其中的 register 的自动访问。 request 对象是另一个来自框架而非 .rpy 自身的东西。

还请注意返回页面内容的方式,这种方式有些新鲜。上面不只返回 HTML 字符串,我们将几次针对 request 对象的写操作高速缓存起来,然后通过调用 request.finish() 来完成这些工作。模样奇特的返回值 server.NOT_DONE_YET 是一个标记,要求 Twisted 服务器将页面内容清出 request 对象。另一个选项是将 Deferred 对象添加到请求中,并在执行对 Deferred 的回调时处理页面(例如,如果直到数据库查询完成后才能生成页面)。

上一页  1 2 3 4 5 6 7  下一页

Tags:使用 Twisted 框架

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接