Web 应用程序开发

代码布局

Twisted Web 应用程序的开发应该与它的部署正交。这意味着,如果您正在开发一个 Web 应用程序,它应该是一个具有子资源和内部链接的资源。一些子资源可能使用 Nevow,一些可能使用 .write 手动创建资源,等等。无论如何,代码应该位于 Python 模块或包中, Web 树之外

您可能希望在开发过程中测试您的应用程序。有许多测试方法,包括将一个看起来像

from mypackage import toplevel
resource = toplevel.Resource(file="foo/bar", color="blue")

.rpy 放入一个目录中,然后运行

% twistd web --path=/directory

您还可以编写类似于以下的 Python 脚本:

#!/usr/bin/env python

from twisted.web import server
from twisted.internet import reactor, endpoints
from mypackage import toplevel

endpoint = endpoints.TCP4ServerEndpoint(reactor, 8080)
endpoint.listen(
    server.Site(toplevel.Resource(file="foo/bar", color="blue")))
reactor.run()

Web 应用程序部署

您使用哪种开发策略并不重要,因为(这是重点)部署是正交的。稍后,当您希望用户实际使用您的代码时,您应该考虑该怎么做 - 或者更确切地说,不要考虑。用户可能会有不同的需求。有些人可能希望在不同的进程中运行您的代码,因此他们将使用分布式 Web (twisted.web.distrib )。有些人可能正在使用 twisted-web Debian 包,并将

% cat > /etc/local.d/99addmypackage.py
from mypackage import toplevel
default.putChild(b"mypackage", toplevel.Resource(file="foo/bar", color="blue"))
^D

如果您想对用户友好,您可以在您的包中提供许多示例,例如上面的 .rpy 和 Debian 包的插入。但是,最终的友好性是编写一个有用的资源,该资源没有内置的部署假设。

理解资源脚本 (.rpy 文件)

Twisted Web 不是 PHP - 它有更好的工具来组织 Python 模块和包中的代码,所以请使用它们。在 PHP 中,组织代码的唯一工具是网页,这会导致一些愚蠢的事情,例如充满了其他页面导入的函数的 PHP 页面,等等。如果您使用 Twisted Web 以这种方式编写代码,您将使用许多 .rpy 文件进行 Web 开发,所有这些文件都导入了一些 Python 模块。这是一个糟糕的主意 - 它将部署与开发混淆在一起,并确保您的用户将绑定到文件系统。

我们有 .rpy,因为它们有用且必要。但是,错误地使用它们会导致难以维护的应用程序。确保您正确使用它们的最佳方法是,在您进入最终部署阶段之前,根本不使用它们。然后您会发现您的 .rpy 文件将少于 10 行,因为您没有超过 10 行要写。