25

Pythonを使用してサーバーサイドスクリプトを実行したいと思います。しかし、私はそれを行うための多くの方法に少し迷っています。

それは日曜大工のCGIアプローチで始まり、基本的にすべての仕事を自分で行うかなり堅牢なフレームワークで終わるようです。そして、web.pyPyroxideDjangoなど、その間にあるものは非常にたくさんあります。

  • あなたが取り組んできたフレームワークやアプローチの長所短所は何ですか?
  • どのようなトレードオフがありますか?
  • 彼らはどのようなプロジェクトでうまくいき、何がうまくいかないのでしょうか。

編集:私はまだWebプログラミングの経験があまりありません。

パラメータのURLを解析するなどの基本的で面倒なことは避けたいと思います。
一方、Ruby on Railsを使用して15分で作成されたブログのビデオには感銘を受けましたが、何百ものものが隠されていることに気付きました私から-これは、すぐに作品を書く必要がある場合はクールですが、魔法を本当に理解するにはそれほど素晴らしいものではありません-そしてそれが私が今求めているものです。webapp

4

9 に答える 9

17

CGI はトラフィックの少ない Web サイトには適していますが、それ以外の場合はパフォーマンスに問題があります。これは、リクエストが来るたびに、サーバーが独自のプロセスで CGI アプリケーションを開始するためです。これには 2 つの理由があります。1) プロセスの開始と停止に時間がかかること、2) メモリに何もキャッシュできないことです。FastCGI を使用することもできますが、その方法を使用する場合は、単純なWSGIアプリを作成する方がよいと思います (WSGI の動作方法は、実際には CGI と大きく異なるわけではありません)。 )。

それ以外は、ほとんどの場合、フレームワークにどれだけのことをさせたいかによって選択します。Django や Pylons のような、すべて歌って踊るフレームワークを使用できます。または、組み合わせたアプローチを使用することもできます (HTTP には CherryPy、データベースには SQLAlchemy、展開には貼り付けなどを使用します)。また、ほとんどのフレームワークでは、別のコンポーネントを別のコンポーネントに切り替えることもできるため、これら 2 つのアプローチは必ずしも相互に排他的ではありません。

個人的には、あまりにも多くの魔法をかけてくれるフレームワークは嫌いで、組み合わせのテクニックを好みますが、私も完全に正気ではないと言われたことがあります。:)

Web プログラミングの経験はどのくらいありますか? あなたが初心者なら、Djangoを使ってください。経験豊富な方は、適切な方法が見つかるまで、さまざまなアプローチやテクニックを試してみてください。

于 2008-09-04T13:35:45.390 に答える
12

最も単純な Web プログラムは CGI スクリプトです。これは基本的に、標準出力が要求を行った Web ブラウザにリダイレクトされる単なるプログラムです。このアプローチでは、すべてのページに独自の実行可能ファイルがあり、リクエストごとにロードして解析する必要があります。これにより、何かを起動して実行するのは非常に簡単になりますが、パフォーマンスと組織の両方の点でうまく拡張できません。そのため、大規模なシステムに成長しない非常に動的なページが非常に迅速に必要な場合は、CGI スクリプトを使用します。

これからの 1 つのステップは、Python コードを PSP などの HTML コードに埋め込むことです。現代のテンプレートシステムではこれがかなり時代遅れになっているため、今日では多くの人がこれを使用していないと思います。私はしばらく PSP を使用していましたが、基本的に CGI スクリプトと同じ組織上の制限 (すべてのページに独自のファイルがあります) があることに加えて、空白を無視する HTML と空白に敏感な Python を混在させようとすると、空白に関連する煩わしさがいくつかあることがわかりました。

次のステップは、私も使用した web.py などの非常に単純な Web フレームワークです。CGI スクリプトと同様に、何かを起動して実行するのは非常に簡単で、複雑な構成や自動生成されたコードは必要ありません。独自のコードは非常に簡単に理解できるため、何が起こっているかを確認できます。ただし、他の Web フレームワークほど機能が豊富ではありません。前回使用したときは、セッション追跡がなかったため、自分でロールバックする必要がありました。また、Guido ("upvars(), bah") を引用するには「あまりにも多くの魔法の動作」があります。

最後に、Django などの機能豊富な Web フレームワークがあります。単純な Hello World プログラムを機能させるには少し手間がかかりますが、すべての主要なプログラムには、よく練られた優れたチュートリアル (特に Django) が用意されており、順を追って説明しています。利便性、機能、ドキュメントなどから、実際のプロジェクトにはこれらの Web フレームワークのいずれかを使用することを強くお勧めします。

最終的には、あなたが好むものを決定する必要があります。たとえば、フレームワークはすべてテンプレート言語 (特別なコード/タグ) を使用して HTML ファイルを生成します。Cheetah テンプレートなどの一部では、テンプレートで何でもできるように、任意の Python コードを記述できます。Django テンプレートなどの他のテンプレートはより制限的であり、プレゼンテーション コードをプログラム ロジックから分離する必要があります。それはあなたが個人的に好むものについてのすべてです。

もう 1 つの例は、URL の処理です。Django などの一部のフレームワークでは、正規表現を使用してアプリケーションで URL を定義する必要があります。CherryPy などの他のものは、関数名によって関数を URL に自動的にマップします。繰り返しますが、これは個人的な好みです。

個人的には、Web サーバー関連 (フォーム パラメーター、セッション処理、URL マッピングなど) に CherryPy を使用し、オブジェクト リレーショナル マッピングとテンプレートに Django を使用して、Web フレームワークを組み合わせて使用​​しています。私のお勧めは、高レベルの Web フレームワークから始めて、チュートリアルを進めてから、小さな個人プロジェクトに着手することです。私が言及したすべてのテクノロジーでこれを行いましたが、それは本当に有益でした. 最終的には、自分が好むものの感触をつかみ、その過程でより優れた Web プログラマー (および一般的に優れたプログラマー) になるでしょう。

于 2008-09-04T14:11:54.740 に答える
7

WSGI ベースのフレームワーク (たとえばTurboGears ) を使用する場合は、Ian Bicking による優れた記事「 Another Do-It-Yourself Framework」を参照することをお勧めします。

この記事では、単純な Web アプリケーション フレームワークをゼロから構築しています。

また、 Kevin DangoorによるWSGI を使用した Web フレームワークの作成のビデオもご覧ください。Dangoor は TurboGears プロジェクトの創設者です。

于 2008-09-04T13:24:55.073 に答える
4

大きくしたい場合は、Django を選択すれば準備完了です。しかし、単に学習したい場合は、既に述べた WebObを使用して独自のフレームワークを作成してください。これは非常に楽しいものであり、さらに多くのことを学ぶことができると確信しています (さらに、テンプレート システム、URL ディスパッチャー、データベース レイヤーなど、好きなコンポーネントを使用できます。セッションなど)。

過去 2 年間、私は Django を使用して大規模なサイトをいくつか構築しましたが、私が言えることは、Django は 20% の時間でニーズの 80% を満たすことができるということです。どのフレームワークを使用しても、残りの 20% の作業には 80% の時間がかかります。

于 2008-09-17T20:04:12.550 に答える
3

学習演習として、難しい方法で何かを行うことは、常に価値があります。仕組みを理解したら、アプリケーションに適したフレームワークを選択して使用します。角速度を理解すれば、車輪を再発明する必要はありません。:-)

Django と Python の両方 (または Ruby と Rails、または X と Y) を同時に学習しようとすると、フレームワークの背後あるプログラミング言語をかなり確実に理解していることを確認してから、作業に取りかかることも重要です。さらなる混乱に。最初に言語でコードを書き、次にフレームワークを追加します。

ツールを使用するのではなく、問題を解決することによって開発を学びます。いくつかの壁にぶつかり、乗り越えて、より高い壁を見つけてください!

于 2008-10-21T14:49:57.573 に答える
2

これまでにCGIプログラミングを行ったことがない場合は、DIYアプローチを使用して、1つのプロジェクト(おそらく自分だけのサンプルプレイサイト)を行う価値があると思います。フレームワークを使用するよりも、さまざまな部分がどのように機能するかについて多くを学ぶことができます。これは、将来のすべてのWebアプリケーションの設計やデバッグなどに役立ちます。

個人的にはDjangoを使用しています。本当の利点は、アプリケーションの展開が非常に速いことです。オブジェクトリレーショナルマッピングは物事を速く動かし、テンプレートライブラリは使用するのが楽しいです。また、管理インターフェースは、すべてのオブジェクトの基本的なCRUD画面を提供するため、「退屈な」ものを記述する必要はありません。

ORMベースのソリューションを使用することの欠点は、パフォーマンス上の理由から、SQLを手作りしたい場合、それ以外の場合よりもはるかに困難になることですが、それでも非常に可能です。

于 2008-09-04T13:17:38.880 に答える
2

Pythonを使用している場合は、CGIから始めるのではなく、WSGIから始める必要があります(wsgiref.handlers.CGIHandlerを使用WSGIスクリプトをCGIスクリプトとして実行できます。結果は基本的にCGIと同じくらい低レベルです(これは教育的な意味で役立つかもしれませんが、多少面倒でもあります)が、完全に古いインターフェイスに書き込む必要はありません(そしてアプリケーションを単一のプロセスモデルにバインドする必要はありません)。

煩わしさは少ないが、同様に低レベルのインターフェイスが必要な場合は、WebObを使用するとそれが可能になります。あなたはすべてを実装するでしょうロジック、そしてあなたが理解できないいくつかの暗いコーナーがありますが、HTTP日付を解析する方法(それらは奇妙です!)またはPOST本文を解析する方法を理解するために時間を費やす必要はありません。私はこの方法で(他のフレームワークなしで)アプリケーションを作成し、それは完全に機能します。初心者として、フレームワークが何をするのかを理解することに興味があるなら、これをお勧めします。あなた自身のミニフレームワークを書くことは避けられないからです。OTOH、実際のフレームワークは、おそらくアプリケーションの設計と構造の優れた実践を教えてくれるでしょう。本当に優れたWebプログラマーになるには、両方を真剣に試す必要があると思います。フレームワークが行うすべてのことを理解し、その内部を恐れないようにする必要がありますが、他の誰かが設計した思慮深い環境で時間を過ごす必要もあります(つまり、

于 2009-07-30T21:44:35.230 に答える
1

小規模なプロジェクトの場合、独自に展開するのはかなり簡単です。特に、 Genshiのようなテンプレート エンジンをインポートするだけで、非常に迅速かつ簡単に多くのことを実行できるためです。電動ドリルを探しに行くよりも、ドライバーを使った方が早い場合もあります。

本格的なフレームワークはより多くの機能を提供しますが、その機能を活用するには、まずインストールしてセットアップする必要があります。大規模なプロジェクトでは、これは無視できる問題ですが、小規模なプロジェクトでは、特にフレームワークに慣れていない場合は、ほとんどの時間がかかる可能性があります。

于 2009-12-09T13:02:23.297 に答える
1

わかりました、Rails は実際にはかなり優れていますが、そこには魔法が少し多すぎます (Ruby の世界では、Rails よりも Merb の方が好きです)。私は個人的に Pylons を使用していますが、とても満足しています。(djangoと比較して)pylonsを使用すると、djangoよりも簡単にintの内部パーツを交換できると思います。欠点は、(基本的な CRUD のように) 自分でより多くのものを書かなければならないことです。

フレームワークを使用する利点:

  1. 作業をすばやく完了できます (つまり、フレームワークを理解すれば、すぐに作業を完了できます)。
  2. すべてが標準に準拠しています (これは、独自のものを作成するときに達成するのはおそらく簡単ではありません)
  3. 無数の記事やドキュメントを読まなくても、何かを機能させるのが簡単 (多くのチュートリアル)

短所:

  1. あなたはあまり学ばない
  2. 部品の交換が困難 (パイロンではそれほど問題ではなく、django ではさらに問題)
  3. 一部の低レベルのものを微調整するのが難しい(上記のSQLなど)

そこから、おそらくそれらが何に適しているかを考案することができます:-) すべてのコードを取得するので、最も奇妙な状況にも合うように微調整することが可能です (パイロンは現在、Google アプリエンジンで動作すると思われます...)。

于 2008-09-04T19:55:29.453 に答える