2017-02-26 4 views
1

WebManagerをインスタンス化してアプリケーションの一部として登録します。私はワークフローとWebアプリケーションを一緒に実行しています。 POSTデータを取得することを除いて、すべてが検出されます。呼び出すには、以下を使用し回路(Python)でPOSTデータを取得するにはどうすればよいですか?

class WebSite(Controller): 
    def index(self): 
     return "Hello World!" 

    def detail(self, id): 
     return "Web ID: {}".format(id) 


class WebService(Controller): 

    channel = "/WebService" 

    def POST(self, *args, **kwargs): 
     return str(args) + ' ' + str(kwargs) + ' ' + 'Why are these empty?' 


class WebManager(Component): 
    def init(self): 
     Server(('0.0.0.0', 80)).register(self) 
     WebSite(self).register(self) 
     WebService(self).register(self) 

import requests 

r = requests.get('http://localhost') 
print(r.text) 
# Output: Hello World! 

r = requests.get('http://localhost/detail?id=12') 
print(r.text) 
# Output: Web ID: 12 

r = requests.post('http://localhost/WebService', json={'bob': 1, 'joe': {'blue': 43}}) 
print(r.text) 
# Output:() {} Why are these empty? 

私はドキュメントを完了したと私はポストの身体データを取得する方法を見つけ出すことはできません。私はそれが引数の1つとして渡されると仮定しました。私もPyCharmデバッガで停止し、WebServiceの自己オブジェクトを見て、何も見ませんでした。

答えて

1

なぜあなたは質問をした直後に答えを見つけるのですか?

POSTメソッドを実行すると、コントローラの.request.bodyプロパティがあります。これはio.BytesIOオブジェクトなので、ファイルのように読み込まれ、バイトが送られます。

class WebService(Controller): 

    channel = "/WebService" 

    def POST(self): 
     # I'm using JSON, so decoding the bytes to UTF-8 string to load 
     data = json.loads(self.request.body.read().decode('UTF-8')) 
     return 'Data: {}'.format(data) 
関連する問題