【问题标题】:Which way to go with twisted and web-programming?哪种方式可以使用扭曲和网络编程?
【发布时间】:2011-06-17 22:44:32
【问题描述】:

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

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

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

还有没有其他可能在twisted 之上拥有一个漂亮的用户界面?

【问题讨论】:

  • 你调查过 CherryPy 了吗?
  • BuildBot 工具是用 Twisted 编写的,并且有一些不错的网页输出,它可能是一个学习的好地方。

标签: python django twisted twisted.web nevow


【解决方案1】:

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

我对 Nevow 的长期希望如下。 (我会说“计划”,但由于我最近没有积极参与它的维护,这真的取决于那些人。)首先,我想提取它的模板设施并将它们移动到扭曲中。网。用于 Nevow 的干净、未弃用的 API 主要由 nevow.page.Element 和各种 loaders 覆盖。 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 时,你会收到一些弃用警告,更改一些 @代码中的 987654328@ 行从 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。这不是那么异步友好,但它显然有更广泛的支持基础。然而,“不像异步友好”并不意味着“难以使用”。您可以在 Django 应用程序中通过 WSGIResourceand simply use blockingCallFromThread 在twisted.web 中运行它,以调用任何返回 Deferred 的 Twisted API,它应该足够强大,可以做任何您想做的事情。如果您对如何实例化 Twisted Web 资源以结合 Twisted Web 和 Django 有更具体的问题,您可能应该在它自己的 Stack Overflow 问题中提出。

【讨论】:

    【解决方案2】:

    如果您希望在您使用的模板系统中支持 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 不是线程安全的,你必须使用 @ 调用它们987654321@ 或少数类似 API 之一(特别是,blockingCallFromThread 有时是一个有用的高级工具)。

    【讨论】:

      【解决方案3】:

      在这一点上,Nevow 绝对死了。为了说明它有多死,有一个 bug that prevents installation of Nevow using pip,它在 2009 年被固定在主干上,但它现在没有发布,因为从那时起就没有发布过。

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

      【讨论】:

      • 在我写这篇文章的时候,Nevow 已经死了,然而,后来有一个版本 (0.11.1)。这主要是为了解决依赖它的现有项目的打包问题,我仍然不建议将它用于新的开发。
      • 在 2018 年你有任何异步 Web 开发的替代方案吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多