2013-06-17 15 views
5

私はDjangoコンシューマへのAPIを提供するFlaskアプリケーションを持っています。私は消費者にrequests libraryを使ってAPIを打ちました。Flask/Werkzeugリクエストオブジェクトのパラメータ

私のAPIをテストするとrequest.formのPOSTデータが得られます。要求ライブラリを使用して消費者からヒットしたときには、POSTデータはrequest.dataになります。

例えば、フラスコアプリで

APIエンドポイント:フラスコアプリで

@mod.route('/customers/', methods=['POST']) 
def create_prospect(): 
    customer = Customer() 
    prospect = customer.create_prospect(request.form) 
    return jsonify(prospect.serialize()), 201 

テストAPIエンドポイント:

def test_creating_prospect(self): 
    with self.app.app_context(): 
     data = {'name': 'Test company and co'} 
     response = self.client.post(self.url, data=data) 
     ... 

これが正常に動作します私のエンドポイントにrequest.formに移入されます。

要求を使用して、私のDjangoアプリケーションからAPIを消費:これは私が情報のためrequest.formチェックしてるとして失敗した私のエンドポイントにrequest.dataを移入

... 
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} 
data = {'name': 'Test company and co'} 
response = requests.post(url, data=data, headers=headers) 

私はこの質問を書いている間に考えてきました。おそらく、jsonヘッダーによって、request.formの代わりにrequest.dataが設定されている可能性がありますか?

すべての入力が高く評価されています。

編集 - 私は私のテストにヘッダを追加しようとしたが、うまく働いた:

headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} 
    response = self.client.post(self.url, data=data, headers=headers) 

答えて

6

ああ、私は間違ったのContent-Typeを送信していました。これを 'application/x-www-form-urlencoded'に変更すると、request.formは適切なものになります。

request.data Flask/Werkzeugは、according to the docsとは関係がありません。

関連する問題