python - 扭曲和Web编程该走哪条路?

标签 python django twisted twisted.web nevow

因此,几个月前,我对这个扭曲的应用程序进行了编程,现在我希望使用基于Web的用户界面进行扩展,以进行配置。

Twisted网站推荐Nevow,但我不确定这是否是一个不错的选择。他们的网站似乎已经停顿了一段时间,而且启动板页面在半年内没有任何更新。这个项目死了吗?
另外,我在扭曲Web邮件列表上看到了有关将Nevow的各个部分移入twisted.web的讨论。因此,是否仍建议将其用于新开发?

另一个想法是使用Django。无论如何,我都需要在配置界面中进行用户身份验证和许可,并且我对此非常熟悉。 (我从未使用过Nevow或twisted.web)
但是似乎很难将两个世界都连接起来,我所能找到的就是在Twisted中使用WSGI运行Django的示例。

还有其他可能在扭曲的顶部具有漂亮外观的用户界面吗?

最佳答案

首先,让我谈谈内夫已死的看法。包含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 channel 以获得帮助。如果您通过贡献补丁来提供帮助,您会发现在那里会得到很多热情的帮助。当您忽略不推荐使用的部件时,Nevow会提供一个非常小的,理智的,扭曲的友好API。我上面概述的内夫发展计划的结果实际上是很小的。如果根本没有发生,对您来说意味着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。这并不是异步友好的,但是显然它有更广泛的支持基础。但是,“不异步友好”并不意味着“难以使用”。您可以在Django应用程序中通过WSGIResourceand simply use blockingCallFromThread在twisted.web中运行它,以调用任何返回Deferred的Twisted API,该API应该足够强大,可以执行所需的任何操作。如果您对如何实例化Twisted Web资源以将Twisted Web和Django结合起来有更具体的问题,则可能应该在它自己的Stack Overflow问题中提出。

关于python - 扭曲和Web编程该走哪条路?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4840444/

相关文章:

python - 使用 aiohttp.ClientSession() 发出请求时如何为 aiohttp.client 设置日志记录?

django - 无法使用 Select 作为小部件迭代 ChoiceField

django - 如何在 Django 中向 User.groups.through 添加一个字段?

python - twisted的Deferred是如何实现的?

Python 扭曲 : Reverse Proxy to HTTPS API: Could not connect

python - 关于 Django 在 urlpattern 中的 pk

python - 如何使QMessageBox和QInputDialog在屏幕上居中?

python - 可以用递归完成吗?

部署时的 Django 静态文件问题

python - twistd 可以像 django 一样自动重置服务器吗?