Атрибут is_json
Атрибут is_json применяется к объекту запроса
request и возвращает булево значение.
Он равен True, если заголовок
Content-Type запроса указывает на тип
application/json или application/*+json,
иначе возвращается False. Атрибут не читает
тело запроса и не разбирает его, а только проверяет
заголовки.
Атрибут не принимает параметров и доступен только
для чтения. Его удобно использовать перед вызовом
метода get_json, чтобы избежать исключения
при попытке разобрать данные неверного типа.
Синтаксис
request.is_json
Пример
Давайте отправим на сервер данные в формате JSON
и проверим атрибут is_json:
from flask import Flask, request
app = Flask(__name__)
@app.route('/api', methods=['POST'])
def api():
if request.is_json:
res = request.get_json()
return {'received': res}
return {'error': 'not json'}
Отправим запрос с заголовком
Content-Type: application/json:
curl -X POST http://localhost:5000/api -H "Content-Type: application/json" -d '{"name": "abcde"}'
Результат выполнения кода:
{"received": {"name": "abcde"}}
Пример
А теперь отправим обычные данные формы и убедимся,
что атрибут вернёт False:
from flask import Flask, request
app = Flask(__name__)
@app.route('/api', methods=['POST'])
def api():
if request.is_json:
res = request.get_json()
return {'received': res}
return {'error': 'not json'}
Отправим запрос с типом
application/x-www-form-urlencoded:
curl -X POST http://localhost:5000/api -d "name=abcde"
Результат выполнения кода:
{"error": "not json"}
Пример
Атрибут is_json также возвращает True
для заголовков вида application/*+json.
Давайте проверим это с типом
application/vnd.api+json:
from flask import Flask, request
app = Flask(__name__)
@app.route('/check', methods=['POST'])
def check():
return {'is_json': request.is_json}
Отправим запрос с типом
application/vnd.api+json:
curl -X POST http://localhost:5000/check -H "Content-Type: application/vnd.api+json" -d '{"id": 1}'
Результат выполнения кода:
{"is_json": true}
Смотрите также
-
метод
get_json,
который разбирает тело запроса как JSON -
метод
on_json_loading_failed,
который вызывается при ошибке разбора JSON -
атрибут
json,
который содержит разобранные JSON-данные -
атрибут
data,
который содержит тело запроса в виде байтов