9

所以,我在几个月前编写了这个扭曲的应用程序,现在我想用一个基于 Web 的用户界面来扩展它以进行配置。

Twisted 网站推荐 Nevow,但我不确定这是否是一个好的选择。他们的网站似乎已经关闭了一段时间,并且他们的启动板页面在半年内没有看到任何更新。这个项目死了吗?此外,我在twisted-web 邮件列表上看到了关于将Nevow 的部分移动到twisted.web 的讨论。那么,对于新的发展,它仍然被推荐吗?

另一个想法是使用 Django。无论如何,我都需要在配置界面中进行用户身份验证和权限,我对此非常熟悉。(我从未使用过 Nevow 或twisted.web)但是这两个世界的接口似乎相当困难,我所能找到的只是在 Twisted 中使用 WSGI 运行 Django 的示例。

在twisted 之上是否有任何其他的可能性来拥有一个漂亮的用户界面?

4

3 回答 3

9

首先,让我谈谈 Nevow 已死的看法。包含 Nevow 代码(以及其他 Divmod 项目)的启动板项目是divmod.org on launchpad。硬件故障严重影响了该项目的公众形象,但它仍然存在,其他东西(如 wiki 和门票)正在恢复过程中。目前并没有进行很多积极的维护工作,但这主要是因为它对大多数用户来说已经足够好了;有很多人依赖于 Nevow,如果它停止工作,他们会非常沮丧。这些人拥有继续维护它所必需的技能和经验。所以,虽然它现在没有被积极推广,但我认为它不太可能消失。

我对 Nevow 的长期希望如下。(我会说“计划”,但由于我最近没有积极参与它的维护,这真的取决于那些人。)首先,我想提取它的模板设施并将它们移动到扭曲中。网。用于 Nevow 的干净、未弃用的 API 主要由nevow.page.Element和各种加载器覆盖. Twisted 本身想在一些地方生成 HTML,这些工具可能很有用。然后我们应该扔掉 Nevow 的“appserver”和资源模型部分。这些大多只是针对 twisted.web 的错误修复或更改的随机集合,其中大部分以某种形式存在于 twisted.web2 中,因此无论如何都会回滚到 twisted.web 中,或者已经在那里应用。最后是雅典娜的问题。虽然双向通信是 Twisted 的强项之一,但 Athena 本身就是一个庞大的、庞大的 JavaScript 代码库,应该仍然是它自己的项目。

第三,关于主要问题,鉴于这些信息,您现在应该做什么?

一般来说,我会说“使用nevow”。这个项目有一些缺陷,它需要更多的文档,它的 API 需要被修剪以消除一些旧的和损坏的东西,但它仍然非常有用并且非常活跃。为了弥补稍微稀疏的文档,您可以加入 Freenode 上的#divmod#twisted.web频道以获得帮助。如果您在可能的情况下通过提供补丁来提供帮助,您会发现在那里您会得到很多热情的帮助。当您忽略不推荐使用的部分时,Nevow 有一个非常小、理智、扭曲的友好 API。我上面概述的 Nevow 发展计划的后果实际上非常小。如果它发生了,它对你意味着什么也就是说,在 1 到 5 年内,当您升级到新版本的 Twisted 时,您会收到一些弃用警告,import将代码中的某些行更改from nevow.page import ...; from nevow.loaders import ...为一些假设的新内容,例如from twisted.web.page.element import ...; from twisted.web.page.templates import ...,或类似的东西。在那之后的大多数 API 应该保持不变,而且高级概念绝对不应该有太大变化。

使用 Nevow 的主要优势是它是异步友好的,并且可以在主线程中呈现页面而不会阻塞。此外,您还可以通过 Athena 免费获得真正简单的 COMET。

你也可以使用 Django。这不是那么异步友好,但它显然有更广泛的支持基础。然而,“不像异步友好”并不意味着“难以使用”。你可以通过WSGIResource在twisted.web 中运行它,并且只需在你的Django 应用程序中使用blockingCallFromThread 来调用任何返回Deferred 的Twisted API,它应该足够强大,可以做任何你想做的事情。如果您对如何实例化 Twisted Web 资源以结合 Twisted Web 和 Django 有更具体的问题,您可能应该在它自己的 Stack Overflow 问题中提出。

于 2011-01-30T02:49:13.013 回答
6

如果您希望在您使用的模板系统中支持 Deferreds(它还没有死),Nevow 仍然是一个不错的选择。在复杂的 URL 调度方面,它也比普通的 Twisted Web 有一些优势。但是,它基本上只是一个模板系统。Twisted Web 是真正的 Web 服务器。所以无论哪种方式,您都将使用 Twisted Web。事实上,即使你在 Twisted Web 的 WSGI 容器中使用 Django,你仍然会使用 Twisted Web。所以学习关于 Twisted Web 的东西不会伤害你。

如果您要生成任意数量的 HTML,那么您非常希望使用 HTML 模板库。到目前为止,没有人应该使用原始字符串操作来构造 HTML。因此,如果您想使用其他 Python HTML 模板库之一 - Cheetah、Quixote 等 - 而不是 Nevow,那就太好了!您将使用模板库来获取一个字符串以响应 HTTP 请求。Twisted Web 并不关心字符串的来源。

如果您确实想使用 Django(或其他基于 WSGI 的系统)做某事,那么您当然可以使用 Twisted Web 的 WSGI 支持将其部署在您的 Twisted 进程中。而且你仍然可以在 WSGI 应用程序和 Twisted 代码的其余部分之间进行交互,只要你小心一点 - WSGI 应用程序在线程池中运行,并且 Twisted API 不是线程安全的,你必须使用reactor.callFromThread或调用它们少数类似的 API 之一(特别是,blockingCallFromThread有时是一个有用的高级工具)。

于 2011-01-30T02:36:42.783 回答
1

在这一点上,Nevow 绝对死了。为了说明它有多死,有一个错误会阻止使用 pip 安装 Nevow,该错误已于 2009 年在主干上修复,但它没有在任何版本中,因为从那时起就没有发布过。

twisted.web 尤其是 twisted.web.template 涵盖了几乎所有在 Nevow 中有用的内容,并且应该用于任何正在考虑使用 Nevow 的新项目。

于 2014-01-06T03:22:42.470 回答