Подтвердить что ты не робот

Запросить флажок в файле 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)
4b9b3361

Ответ 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"