使用扭曲和网络编程的方法是什么?

Chr*_*ris 9 python django twisted twisted.web nevow

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

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

另一个想法是使用Django.我还是需要在config-interface中进行用户身份验证和权限,我对它非常熟悉.(我从来没有和Nevow或twisted.web一起工作过)但是这两个世界的界面似乎很难,我只能找到在Twisted中使用WSGI运行Django的例子.

是否还有其他可能在扭曲的基础上拥有光滑的用户界面?

Gly*_*yph 9

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

我对Nevow的长期希望如下.(我会说"计划",但由于我最近没有积极参与其维护,这真的取决于那些人.)首先,我想提取它的模板设施并将它们变成扭曲的.网页.Nevow的干净,不推荐的API主要由nevow.page.Element和各种加载器覆盖.扭曲本身想要在几个地方生成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问题中询问它.


Jea*_*one 6

如果你想在你使用的模板系统中支持Deferreds,那么Nevow仍然是一个不错的选择(它还没有死).当涉及到复杂的URL分派时,它还比普通的Twisted Web有一些优势.但是,它基本上只是一个模板系统.Twisted Web是真正的Web服务器.无论哪种方式,你都会使用Twisted Web.事实上,即使你在Twisted Web的WSGI容器中使用Django,你仍然会使用Twisted Web.因此,了解Twisted Web并不会伤害到你.

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

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