4

Ajax リクエストに応答する PHP スクリプトを作成するのは、次のように簡単です。

<?php
  $command = $_POST["command"];
  if ($command == "say_hello") {
    $name = $_POST["name"];
    echo json_encode(array("message" => "Hello, " . $name));
  }
?>

また、少なくともクライアント側で jQuery を使用していて、元のリクエストでコールバック関数を指定した場合は、メッセージを含む配列がそのコールバック関数に渡されます。

しかし、Python ではそれほど単純ではありません。または、少なくとも私はそれをそれほど単純にする方法を理解していません。応答を「印刷」しようとすると (上記の PHP の「echo」ステートメントと同様)、クライアントは何も返されません。

Python で Ajax リクエストに応答する方法をインターネットで調べたときはいつでも、答えは常に Django または他の Web フレームワークを使用することです。

これらが素晴らしいことは知っていますが、同様のパッケージを使用する必要のない PHP の機能は何でしょうか? サーバー側のスクリプトを PHP ではなく Python で作成したいと考えていますが、サードパーティのフレームワークを使用するよりも DIY のアプローチを採用したいと考えています。

何か助けはありますか?これを行う方法の例は大歓迎です。

4

5 に答える 5

13

しかし、Pythonではそれほど単純ではありません。または、少なくとも私はそれをそれほど単純にする方法を理解していません。応答を「出力」しようとすると(上記のPHPの「echo」ステートメントと同様)、クライアントは何も返されません。

詳細の一部が間違っている可能性がありますが、その理由を説明しようと思います。まず、あなたが話しているPHPは、ApacheWebサーバーに直接焼き付けられます。を実行するechoと、結果が応答ストリーム(サーバーとクライアント間のTCP接続)に出力されます。Pythonで行う場合、実行printしているのは結果を標準出力(コマンドライン)に出力することです。

ほとんどの言語がWebでどのように機能するかは、要求が何らかのWebサーバーに着信し、そのWebサーバーがプログラムを実行することです。プログラムは、Webサーバーが取得するストリームを返し、TCP接続を介してクライアントにストリーミングします。

WebサーバーがPHP標準をWebサーバーストリームにリダイレクトすると仮定します。これにより、PHPはechoその結果を返すことができます。これは例外であり、規則ではありません。

したがって、Pythonを使用してリクエストを処理するには、何らかの方法でPythonを実行できるWebサーバーが必要です。これは伝統的にCGIを使用して行われます。最近では、mod_pythonapache内でPythonをホストするためにのようなものが使用されました。現在、wsgiまたはmod_wsgi使用されています。これは、Pythonと通信するWebサーバー用に定義された標準です。

ミニマリストのPythonWebフレームワークであるweb.pyのようなものを見たいと思うかもしれません。これにより、あなたがやろうとしていることに非常に近づくことができます。

于 2012-06-05T23:16:43.403 に答える
4

PHPは、最初からWebを念頭に置いて構築されました。対照的に、Pythonは汎用言語として設計されました。

PHPからエコーする場合、実際には、HTTP応答の一部としてユーザーに送信されるストリームに書き込んでいます。Pythonで印刷を行うと、デフォルトでは、出力はstdoutストリームに書き込まれます。つまり、httpを介してユーザーに送信される代わりに、出力はコンソール(または現在stdoutをキャプチャしているもの)に書き込まれます。

したがって、PHPにとって、HTTPは第一級市民です。Python、Ruby、Erlang、C、C ++、および他の多くの言語などのより汎用的な言語。さまざまな方法でHTTPと通信する必要があります。PHPは、apacheのmod_phpまたはPHP-FPMなどを介してその通信をすでに処理しています。

すっごく...

独自のサーバーサイドスクリプトを作成する限り、PHPが構築されているレイヤーの代わりにPythonのフレームワークが使用されるため、これに反対することを強くお勧めします。したがって、Pythonを使用して独自に標準に準拠したhttpサーバーを作成することは、それほど簡単ではありません。これが非常に難しい理由は、CGIまたはWSGI(Webを処理するためのPython標準)とインターフェイスするか、独自のHTTPサーバーを作成する必要があるためです。あなたがその仕事をしていると思うなら、私はそれを強くお勧めします!あなたはおそらくそれをすることによってたくさん学ぶでしょう、しかしそれは最も簡単なことではないでしょう。すばらしいことは、非常に多くの図書館がすでにこのコミュニケーションを担当していることです。たとえば、軽量なものを探している場合は、フラスコのようなマイクロフレームワークを強くお勧めしますこれは、非常に単純なものが必要な場合に私が個人的に使用するものです。djangoよりも使い始めるのははるかに簡単ですが、含まれているバッテリーも少なくなっています。

お役に立てれば!

于 2012-06-05T23:34:13.567 に答える
2

jsonという python モジュールがあります。json は Web 中心であり、Django、tornado、twisted、cherrypy などはすべて Python が Web と対話する手段であるため、おそらく非常に多くの回答がフレームワーク (Django など) を扱っています。

これを行うにはさまざまな方法があり、それらは他の質問で対処されます。ただし、質問に答えるために、pythonには標準ライブラリにjsonライブラリがあります

于 2012-06-05T22:52:28.250 に答える
0

ほとんどのPHPインストーラーは、スクリプトを実行することにより、デフォルトでWebディレクトリ内のphpファイルを提供するように構成します。ほとんどのPythonインストーラーはそうではありません。apacheでPythonを提供する最も簡単な方法:

  • AddHandler cgi-script .pyApache構成ファイルで、すでにPHPファイルを提供できるブロックに追加します
  • #!/ usr / local / bin / pythonまたはシステム内でpythonが存在するパスを追加して、Pythonスクリプトをシバンします。
  • 最初にヘッダーを印刷し、次に改行、次に本文を印刷することを忘れないでください。
  • import cgi応答本文を返送するよりも複雑なことをしたい場合に使用します。

これは、Python Webサイトを実行するための推奨される方法ではなく、高速でphp風の方法であることに注意してください。

于 2012-06-05T22:59:30.967 に答える
0

リチャードスはその要点を正しく理解しています。

基本的に、Pythonは汎用スクリプト言語です。そのため、ポートを開いてネットワークプログラミングを行うなど、Webに接続する方法が必要です。CGIを使用してApacheや他のWebサーバーに接続することもできます。

これは、Java、Ruby、Perl、またはC /C++がWebにアクセスする方法とまったく同じです。実際、PHPはほとんど同じことをします。WebサーバーへのインターフェイスはCGIよりもタイトです。

PHPをコマンドラインから解釈したり、コンパイルしたりする場合は、現在Pythonで行うのとまったく同じ問題が発生します。問題はPHPとPythonではなく、HTTPプロトコルを使用して選択したスクリプト言語をインターネットに接続する方法です。

于 2012-06-05T23:00:42.753 に答える