2011-01-30 8 views
9

私はこのツイストアプリケーションを数ヶ月前にプログラミングしました。これは設定用のWebベースのユーザーインターフェイスで拡張したいと考えています。どのようにツイストとウェブプログラミングに行く?

TwistedウェブサイトはNevowを推奨していますが、これが良い選択であるかどうかはわかりません。彼らのウェブサイトはしばらくの間ダウンしており、そのランチパッドのページは半年で更新されていなかった。このプロジェクトは死んでいますか? また、Nevowの一部をtwisted-webメーリングリストのtwisted.webに移動させる議論も見てきました。だから、それはまだ新しい開発に推奨されていますか?

別のアイデアはDjangoを使用していました。とにかくconfig-interfaceでユーザの認証とアクセス権が必要です。私はそれに精通しています。 (私はNevowやtwisted.webを使ったことはありません) しかし、両方の世界をインターフェースするのはかなり難しいようですが、私はTwistedでWSGIを使ってDjangoを実行した例が見つかりました。

ツイストの上に滑らかな見た目のユーザーインターフェイスを持つ可能性はありますか?

+0

CherryPyについてまだ調査しましたか? –

+0

[BuildBot](http://trac.buildbot.net/wiki/ScreenShots)ツールはTwistedで書かれており、素晴らしいWebページ出力を持っています。それは学ぶのに適しているかもしれません。 – sarnold

答えて

6

あなたが使用しているテンプレートシステムでDeferredsをサポートしたい場合、Nevowはまだまだ良い選択です(死んではありません)。また、複雑なURLディスパッチに関しては、プレーンツイストWebよりもいくつかの利点があります。しかし、それは基本的にテンプレートシステムだけです。 Twisted Webは実際のWebサーバーです。だからいずれにせよ、Twisted Webを使うつもりです。実際、Twisted WebのWSGIコンテナでDjangoを使用しても、Twisted Webを使用するつもりです。 Twisted Webについて学ぶことは、あなたを傷つけることはありません。

HTMLの任意の量を生成する場合は、HTMLテンプレートライブラリを使用したいと考えています。この時点までに、誰もプリミティブ文字列操作を使用してHTMLを構築する必要はありません。したがって、Nevowの代わりにCheetah、Quixoteなどの他のPython HTMLテンプレートライブラリを使用したい場合は、それは素晴らしいことです!テンプレートリクエストライブラリを使用して、HTTPリクエストに応じて書き出す文字列を取得するだけです。 Twisted Webは文字列がどこから来たかは気にしません。

Django(または別のWSGIベースのシステム)で何かしたいのであれば、Twisted WebのWSGIサポートを使用して、Twistedプロセスで確実に展開できます。 WSGIアプリケーションはスレッドプール内で実行され、Twisted APIはスレッドセーフではないため、reactor.callFromThreadで呼び出す必要があります少数の同様のAPIのうちの1つ(特に、blockingCallFromThreadは、場合によっては、より高レベルのツールとして使用することができます)。

9

まず、Nevowが死んでいるという認識に言及しましょう。 Nevow(およびその他のDivmodプロジェクトのコード)を含むランチパッドプロジェクトはdivmod.org on launchpadです。ハードウェアの障害はプロジェクトの一般的な存在に悪影響を及ぼしましたが、それはまだ存在し、他のもの(ウィキやチケットのようなもの)は回復中です。現時点では多くの能動的なメンテナンス作業は行われていませんが、ほとんどの場合、それはユーザーのほとんどにとって十分です。 Nevowに依存している多くの人がいて、それが動作しなくなったら非常に動揺します。それらの人々は、それを維持し続けるために必要なスキルと経験を持っています。それで、今は積極的に推進されていないのですが、それがなくなるとは思わないでしょう。

Nevowの私の長期的な希望は以下の通りです。 (私は「計画」と言っていますが、最近はメンテナンスに積極的に関与していないので、これは実際の人たちの責任です)。まず、テンプレート機能を抽出してねじれにしたいと思います。ウェブ。清潔で廃止されていないNevowのAPIは、ほとんどがnevow.page.Elementとさまざまなloadersでカバーされています。Twisted自体は、いくつかの場所でHTMLを生成することを望んでおり、これらの機能は役に立ちます。それから、Nevowの "appserver"とリソースモデル部分を投げ捨ててください。これらはほとんどtwisted.webのバグ修正や変更の無作為なコレクションですが、そのほとんどはtwisted.web2の中に何らかの形で存在していて、とにかくtwisted.webにロールバックされるか、すでにそこに適用されています。最後に、アテナの問題があります。双方向通信はTwistedの強みの1つですが、Athena自体は巨大で広がりのあるJavaScriptコードベースであり、おそらく独自のプロジェクトに残ります。

第3に、この情報を参考にして、今すぐ何をすべきでしょうか?

一般的に言えば、「nevowを使用する」と言います。プロジェクトにはいろいろな疣贅があります。ドキュメントが増え、古いものや壊れたものを取り除くためにAPIをトリミングする必要がありますが、それはまだ非常に有用で非常に生きています。ややまばらな文書を補うために、Freenodeの#divmodまたは#twisted.webチャンネルに参加して助けを得ることができます。可能な限りパッチを提供することによって手助けをすれば、そこに多くの熱心な助けを得ることができます。廃止された部分を無視すると、Nevowはかなり小さく、うまく、ねじれたフレンドリーなAPIを持っています。上記で概説したNevowの進化の計画の結果は、実際にはごくわずかです。たとえそれがまったく起こっても、の意味は、1〜5年後に新しいバージョンのTwistedにアップグレードすると、いくつかの廃止予定の警告が表示され、import行のコードがfrom twisted.web.page.element import ...; from twisted.web.page.templates import ...のような仮説的な新しいものへのfrom nevow.page import ...; from nevow.loaders import ...、あるいは何か。その点を過ぎたAPIのほとんどは同じままでなければならず、間違いなく上位レベルの概念はあまり変わってはいけません。

Nevowを使用することの主な利点は、非同期であり、メインスレッドでページをレンダリングできることです。さらに、AthenaでCOMETを無料で簡単に入手できます。

また、Djangoを使用することもできます。これはあまり非同期的ではありませんが、明らかに幅広いサポートを受けています。しかし、「非同期ではない」とは、「使いにくい」という意味ではありません。あなたはDjangoアプリケーションのWSGIResourceand simply use blockingCallFromThread経由でtwisted.web内で実行することができます。これは、Deferredを返すTwisted APIを呼び出すためのものです。 Twisted WebとDjangoを組み合わせるためにTwisted Webリソースをインスタンス化する方法に関するより具体的な質問がある場合は、おそらく独自のStack Overflow質問でそれを尋ねるべきです。

+0

このアップデートありがとうございます! – mikewaters

1

この時点でNevowは確実に死んでいます。どのように死んでいるのかを示すために、bug that prevents installation of Nevow using pipがあります。これは2009年にトランク上で修正されましたが、その後リリースされていないため、リリースされていません。

twisted.web、特にtwisted.web.templateは、Nevowで役に立つもののほとんどすべてをカバーしており、Nevowを使用することを検討していた新しいプロジェクトに使用する必要があります。

+0

アップデートと要約のための乾杯 –

+0

私がこれを書いた時、Nevowは死んでいましたが、それ以来リリース(0.11.1)がありました。これは、主にそれに依存する既存のプロジェクトのパッケージング問題を修正することでしたが、新しい開発には使用しないことをお勧めします。 –