1. ホーム
  2. python

[解決済み] Flaskのリクエストで受信したデータを取得する

2022-03-21 09:32:27

質問

Flaskアプリに送信されたデータを取得できるようにしたい。私は request.data が、空文字列になってしまいます。リクエストデータにはどのようにアクセスするのですか?

from flask import request

@app.route('/', methods=['GET', 'POST'])
def parse_request():
    data = request.data  # data is empty
    # need posted data here


この質問に対する回答がきっかけで Python Flask で Content-Type ヘッダに関係なく生の POST ボディを取得する 次は、パースされたデータではなく、生のデータを取得することについてです。

どうやって解決するの?

その ドキュメント で利用可能な属性について説明します。 request オブジェクト( from flask import request ) をリクエストすることができます。最も一般的なケースで request.data は、フォールバックとして使用されるため、空になります。

request.data Flask が扱えない mimetype を持つリクエストデータを文字列として格納します。

  • request.args : URL のクエリー文字列のキーと値のペア
  • request.form : HTMLの投稿フォーム、またはJSONエンコードされていないJavaScriptのリクエストから、ボディにあるキーと値のペアを指定します。
  • request.files とは別に、Flask が保管するボディ内のファイルです。 form . HTML フォームでは enctype=multipart/form-data を指定しないと、ファイルがアップロードされません。
  • request.values : 複合 argsform を好む。 args キーが重なっている場合
  • request.json : パースされたJSONデータです。リクエストには application/json コンテンツタイプ、または request.get_json(force=True) を使用すると、コンテンツ・タイプを無視することができます。

これらはすべて MultiDict インスタンス(ただし json ). を使って値にアクセスすることができます。

  • request.form['name'] キーが存在することが分かっている場合は、インデックスを使用します。
  • request.form.get('name') を使用します。 get キーが存在しない可能性がある場合
  • request.form.getlist('name') 使用 getlist キーが複数回送信され、値のリストが必要な場合。 get は最初の値しか返しません。