使用 Twisted 框架进行网络编程,第 2 部分
2008-11-13 13:14:25 来源:WEB开发网创建持久性对象
请注意 Weblog.rpy 顶部少量的条件逻辑。第一次处理动态页面时, Records 对象还未被添加到注册表中。但是第一次之后,我们希望每次调用 records.getNew() 都使用相同的对象。如果调用 registry.getComponent() 成功,则这次调用会返回对应类的已注册对象,否则就返回一个错误值以允许进行测试。当然,调用过程之间,对象保存在 Twisted 服务器的地址空间中。
持久性类最好放在 .rpy 文件所导入的模块中。这样一来,每个动态页面都可以利用您编写的持久性类。实例属性中可以包含您喜欢的任何类型的持久性。但是,有些东西(比如开放文件)不能在服务器关闭时保存(但是,简单的值可以在服务器运行之间保存,并且可以保存在诸如 web-shutdown.tap 之类的文件中)。我使用的模块 persist 包含了一个非常简单的类 Counter ,该类借用自 Twisted Matrix 文档,还包含另一个类 Records ,我将它用于 Weblog 动态页面:
清单 5. 持久性支持模块 persist.py
class Counter:
def __init__(self):
self.value = 0
def increment(self):
self.value += 1
def getValue(self):
return self.value
class Records:
def __init__(self, log_name='../access-log'):
self.log = open(log_name)
self.recs = self.log.readlines()
def getNew(self):
self.recs.extend(self.log.readlines())
self.recs = self.recs[-35:]
return self.recs
您可以很自由地在持久性类中放置您喜欢的任何方法 - 注册表只是在各次对动态页面的调用之间将实例保存在内存中。
下一次
在本文中,我们研究了 Twisted Web 服务器的基础。安装基本服务器(或者甚至是有少许定制代码的服务器)是非常简单的。但是 twisted.web.woven 模块中有更强大的功能,该模块为 Twisted Web 服务器提供了模板制作系统。总而言之,woven 提供了类似于 PHP、ColdFusion 或 JSP 这样的编程风格,但是可以证明,它提供的代码和模板之间的部分比其他那些系统所提供的要有用得多(当然, twisted.web.woven 允许用 Python 编写您的程序)。在本系列的第 3 部分和第 4 部分中,我们还将解决动态页面和 Web 安全性问题。
更多精彩
赞助商链接