6

Django コンシューマーに API を提供する Flask アプリがあります。コンシューマーでrequests ライブラリを使用して API にアクセスします。

私の問題は次のとおりです。API をテストすると、POST データが で取得request.formされ、コンシューマーから (リクエスト ライブラリを使用して) ヒットすると、POST データが で取得されrequest.dataます。

例えば、

Flask アプリの API エンドポイント:

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

Flask アプリでの 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 を使用します。

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

これrequest.dataはエンドポイントに入力されますが、情報を確認していると失敗しますrequest.form

この質問を書いている間、私は考えました。たぶん、jsonヘッダーがrequest.data代わりに作成されていrequest.formますか?

任意の入力をいただければ幸いです。

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

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

1 に答える 1

7

ああ、間違った Content-Type を送信していました。「application/x-www-form-urlencoded」に変更するrequest.formと、適切なものが得られます。

request.dataドキュメントによると、 Flask/Werkzeugは何をすべきかわかりません。

于 2013-06-17T03:18:55.410 に答える