2016-05-16 30 views
-1

私はTornadoを使用してREST APIを作成するためのリクエストハンドラを作成しようとしています。 しかし、私は要求を送信し、そして/またはTornadoで要求を正しくキャッチする方法を見つけるようです。投稿を送信し、RequestHandlerに手動でリクエストを取得

私のコードは次のとおりです。

class VersionHandler2(tornado.web.RequestHandler): 
    def post(self,*args,**kwargs): 
     print "post" 
     print kwargs 
     print args 
     response = { 'version': '3.5.1'} 
     x = self.get_argument('query') 
     self.write(kwargs) 
    def get(self, *args, **kwargs): 
     print "GET" 
     response = { 'GET': '3.5.1'} 
     self.write(response) 

if __name__ == '__main__': 
    sx = Server(7231,[ (r"/prost/", VersionHandler2),(r"/about/", VersionHandler)]) 

    sx.startServer() 

Getメソッドは、応答を送信して機能していますが、POSTメソッドがPOSTデータを取得することができません。私はアドバンスドレストクライアントSENSEを使ってみましたが、運が得られませんでした。私はJSONとしてデータを送信しようとしており、適切なプリフェンスとJSONとして送信しています。 7231/ のContent-Type:アプリケーション/ JSON のContent-Length:

ARCに示すように、私のリクエストボディが

localhostです39 ソースメッセージも

POST /prost/ HTTP/1.1 
HOST: localhost:7231 
localhost: 7231/ 
content-type: application/json 
content-length: 39 

{ 
"query": [ 
"paul" 
] 
} 

、それはすることが可能ですGETメソッドを使用してJSONクエリを送信しますか? 私は弾性検索のようなものを構築しようとしていて、4つのCRUDメソッド - > Post、Put、Get、Deleteを使い、それぞれのメソッドにJSONデータをクエリとして送りたいと思っています。

答えて

2

POSTリクエスト本文はself.request.bodyです。

POSTリクエストがHTMLフォームからのものである場合、self.get_argument(name)は、HTMLフォームの名前付きフィールドを返します。しかし、フォームエンコードされたデータを送信する代わりに、JSONをサーバーに送信するAPIクライアントがある場合は、json.loads(self.request.body)のようなものを使用してください。

+0

これは正しいと思われます。しかし、なぜそれがどこに書かれてself.get_argumentを使用するのですか https://gist.github.com/cjgiridhar/3274687 そして他のいくつかの場所 –

+0

説明するために私の答えを編集しました。 –

関連する問題