Я пытаюсь создать простой API с помощью Flask, в котором я сейчас хочу прочитать некоторые POSTed JSON. Я делаю POST с расширением Postman Chrome, а JSON I POST просто {"text":"lalala"}
. Я пытаюсь прочитать JSON, используя следующий метод:
@app.route('/api/add_message/<uuid>', methods=['GET', 'POST'])
def add_message(uuid):
content = request.json
print content
return uuid
В браузере он правильно возвращает UUID, который я вставил в GET, но на консоли он просто распечатывает None
(где я ожидаю, что он распечатает {"text":"lalala"}
. Кто-нибудь знает, как я могу получить опубликованный JSON из метода Flask?
Для справки вот полный код для отправки json из клиента Python:
Вход "json =" автоматически установит тип содержимого, как описано здесь: публикация JSON с использованием запросов Python
И вышеупомянутый клиент будет работать с этим кодом на стороне сервера:
источник
Это то, как я бы это сделал, и это должно быть
При
silent=True
установкеget_json
функция молча завершится ошибкой при попытке получить тело json. По умолчанию это установлено наFalse
. Если вы всегда ожидаете тело json (не обязательно), оставьте его какsilent=False
.Настройка
force=True
игнорируетrequest.headers.get('Content-Type') == 'application/json'
проверку, которую делает колба для вас. По умолчанию это также установлено вFalse
.Смотрите документацию на колбу .
Я настоятельно рекомендую оставить
force=False
и заставить клиента отправлятьContent-Type
заголовок, чтобы сделать его более явным.Надеюсь это поможет!
источник
silent=True
. Да, это возможно, и я использую это. Он действительно основан на том, как вы разрабатываете свой API для использования. Если для вашей конечной точки не существует такого случая, просто удалитеsilent=True
или явно установите для него значениеFalse
.print(content)
aftercontent = request.get_json()
печатает объект ... но как действительный объект Python (а не как действительный объект JSON). Например, он использует одинарные кавычки, в то время как JSON строго требует двойных кавычек для обоих ключевых значений (строк) в качестве строковых значений. Если вы хотите представление JSON, используйтеjson.dumps()
с объектом.Предполагая, что вы опубликовали действительный JSON с
application/json
типом контента,request.json
будет иметь проанализированные данные JSON.источник
response = request.post('http://127.0.0.1:5000/hello', json={"foo": "bar"})
. После этого бегаresponse.json()
должен вернуться{'foo': 'bar'}
{'foo': 'bar'}
это не действительно JSON. Это может быть допустимое представление объекта Python, которое во многом похоже на JSON, но действительный JSON строго использует двойные кавычки.get_json()
метод запроса декодирует из JSON в объекты Python, да. Где вы ожидаете, что он создаст действительный документ JSON?.json()
или.get_json()
возвращающая действительное представление объекта JSON, а не Python. Я просто смотрю на имя и делаю вывод, что из этого может получиться.Для всех тех, чья проблема была связана с вызовом ajax, вот полный пример:
Ajax-вызов: ключом здесь является использование,
dict
а затемJSON.stringify
И на стороне сервера:
источник
Чтобы дать другой подход.
источник
Предполагая, что вы опубликовали действительный JSON,
источник
Попробуйте использовать параметр силы ...
request.get_json(force = True)
источник