私の理解では、request.args
in FlaskにはGET
リクエストからのURLエンコードされたパラメーターが含まれ、request.form
にはPOST
データが含まれます。 POST
リクエストを送信するときに、request.form
を使用してデータにアクセスしようとすると400
エラーを返しますが、request.args
を使用してアクセスしようとすると、それはうまくいくようです。
Postman
とcurl
の両方でリクエストを送信しようとしましたが、結果は同じです。
curl -X POST -d {"name":"Joe"} http://127.0.0.1:8080/testpoint --header "Content-Type:application/json"
コード:
@app.route('/testpoint', methods = ['POST'])
def testpoint():
name = request.args.get('name', '')
return jsonify(name = name)
JSONをPOSTしている場合、_request.args
_も_request.form
_も機能しません。
_request.form
_は、POST datawith the content content types;form dataは、 _application/x-www-form-urlencoded
_または_multipart/form-data
_ エンコーディングでPOSTされます。
_application/json
_を使用すると、フォームデータをPOSTしなくなります。代わりに request.get_json()
を使用してJSON POST dataにアクセスします。
_@app.route('/testpoint', methods = ['POST'])
def testpoint():
name = request.get_json().get('name', '')
return jsonify(name = name)
_
述べているように、_request.args
_には、リクエストクエリ文字列に含まれる値(_?
_疑問符の後のURLのオプション部分)のみが含まれます。 URLの一部であるため、POSTリクエストボディから独立しています。
Curlのjsonデータが間違っているため、Flaskはデータを解析してフォームを作成しません。
次のようなデータを送信します:'{"name":"Joe"}'
curl -X POST -d '{"name":"Joe"}' http://example.com:8080/testpoint --header "Content-Type:application/json"