Документация гласит, что .is_json()
проверяет только, имеет ли запрос Content-Type
, что указывает на то, что запрос содержит данные JSON.
свойство is_json
Проверьте, указывают ли mimetype данные JSON, либо application / json или application / +json *.
не проверяет, действительно ли данные запроса являются JSON, поэтому полезность этой проверки ограничена. Когда клиент отправляет JSON, но не устанавливает соответствующий заголовок Content-Type
или устанавливает заголовок, но отправляет недействительный JSON, вы ничего не узнаете из .is_json()
.
Однако .get_json()
выполняет проверку «содержит действительный JSON»: он пытается проанализировать данные запроса как JSON, и это либо работает, в этом случае он возвращает данные, либо завершается ошибкой, и в этом случае выдает ошибку. По умолчанию .get_json()
внутренне вызывает .is_json()
в любом случае.
Для того, что вы хотите сделать, я бы сказал, что этого достаточно.
def get_json_data():
data = flask.request.get_json()
Если синтаксический анализ не выполнен, нетвыдана ошибка (сравните werkzeug docs ). Вместо этого «Bad Request» возвращается клиенту. Если вы хотите изменить это поведение, переопределите метод Request.on_json_loading_failed()
своей собственной версией.