Запросить флажок в файле request.form
Я понимаю, что request.args
в Flask содержит URL-кодированные параметры из запроса GET
, а 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)
Ответы
Ответ 1
Вы выполняете JSON, ни request.args
, ни request.form
не будут работать.
request.form
работает только в том случае, если вы используете POST-данные с правильными типами контента; данные формы либо отправляются с помощью application/x-www-form-urlencoded
или multipart/form-data
кодировок.
Когда вы используете application/json
, вы больше не используете данные формы POST. Используйте request.get_json()
для доступа к данным POST JSON:
@app.route('/testpoint', methods = ['POST'])
def testpoint():
name = request.get_json().get('name', '')
return jsonify(name = name)
Ответ 2
Ваши данные json в curl неверны, поэтому Flask не анализирует данные для формирования.
Отправить данные следующим образом: '{"name":"Joe"}'
curl -X POST -d '{"name":"Joe"}' http://example.com:8080/testpoint --header "Content-Type:application/json"