4

Pythonスクリプトでajax-requestに答えようとしています。ajax-request は、次のように json-object を送信します。

$.ajax({
     url : "cgi-bin/mycgi.py",
     type : "POST",
     data : JSON.stringify(MyJSONObject),
     success : function() {...do something},
     error : function(xhr,errmsg,err) {
           alert(xhr.status);
     }
}

私の Python スクリプト mycgi.py には次の行があります。

import sys
import simplejson as json

...

myjson = json.loads(sys.stdin.read())

#do something with the object

mystatus = "200 OK"

sys.stdout.write("Status: %s\n" % mystatus)
sys.stdout.write("Content-Type: application/json")
sys.stdout.write("\n\n")
sys.stdout.write(json.dumps(myjson))

基本的にすべて正常に動作します。私のブラウザは応答を受け取り、ステータスが「200 OK」に設定されている場合、要求が成功したことを認識し、返されたオブジェクトで成功部分のコマンドを実行します。

しかし、2 つの質問があります。

  1. スクリプトがエラー メッセージでエラーを返すようにするにはどうすればよいですか? 「202 OK」の代わりに「404」を返すことができ、ブラウザはエラーがあることを認識します。しかし、エラーメッセージを返す方法がわかりません。このメッセージを応答のヘッダーに入れる必要がありますか?
  2. クライアントとサーバー間の私の通信方法が「単純すぎる」かどうか、そしておそらくリスクが大きすぎるかどうかを知りたいです。ここで同様の問題に関する他の質問を読んだとき、人々が「リクエスト」のようなpython-modulesで作業したり、BaseHTTPRequestHandlerからクラスを派生させたりすることがわかりました。Pythonスクリプトをできるだけシンプルに保ちたいです。なんらかの理由で、おそらく別の道に進む必要があるのでしょうか?

どうもありがとう!

4

1 に答える 1

2

あなたの最初の質問に:

ステータス コードを 200 に設定した応答と同様に、他のステータス コードを返すときに、応答にコンテンツを追加できます。標準のhttp://www.w3.org/Protocols/rfc2616/rfc2616-sec10.htmlに従う場合は、ステータス コードに応じて、コンテンツに詳細を追加するか、追加のヘッダーを追加する必要があります。

JavaScript では、ajax 呼び出しから取得した応答の特定のステータス コード、または実行中のすべてのエラーのハンドラーをセットアップできます。詳細については、 http://api.jquery.com/jQuery.ajax/を参照してください。これらのハンドラーでは、応答コンテンツにアクセスしてメッセージを表示できます。

$.ajax({
   url : "cgi-bin/mycgi.py",
   type : "POST",
   data : JSON.stringify(MyJSONObject),
   success : function() {...do something},
   error : function(xhr,errmsg,err) {
       // show status code and response content
       alert(xhr.status + ": " + xhr.responseText);
   }
}

HTML を返して表示したい場合は、応答を jQuery オブジェクトに変換するだけです。

var response = $(xhr.responseText);

2 番目の質問に:

個人的には、アプリケーションの低レベルの部分をすべて自分で行うよりも、既存のツールを使用することを好みます。不必要な複雑さとボイラープレートを隠すライブラリを使用する場合に得られると私が考える利点の膨大なリストがあります。私の頭のてっぺんにあるものを含む非常に短いリスト:

  1. 車輪の再発明はしたくない
  2. 他の何千人もの開発者が使用しているライブラリを使用する場合のバグが少ない
  3. 高レベルの抽象化を使用すると、自分のコードが改善されます
  4. よく知られているライブラリを使用する場合のインターネット上の良い例
  5. 多くの場合、将来のニーズはすでにカバーされています

したがって、あなたの場合、もう少し進んで、スリムな Python Web アプリケーション フレームワークを見ていきます。しかし、これはもちろんアプリケーションに大きく依存します。

于 2013-01-30T15:44:41.963 に答える