API объекта ответа Flask
Класс Response представляет HTTP-ответ, возвращаемый функциями представления Flask. В большинстве случаев создавать его напрямую не нужно — Flask автоматически преобразует возвращаемые значения функций представления в объекты Response.
Когда требуется ручное управление, используйте функциюmake_response().
Конструктор
| Параметр | Type | Значение по умолчанию | Описание |
|---|---|---|---|
| response | str / bytes / итератор | Обязательный | Содержимое тела ответа |
| status | int / str | 200 | Код состояния HTTP или текст состояния, например 404 или "404 Not Found" |
| headers | dict / list | Отсутствует | Заголовки ответа, dict или список кортежей (key, value) |
| mimetype | str | Отсутствует | Тип MIME, например "application/json" |
| content_type | str | Отсутствует | Заголовок Content-Type, включая charset, например "text/html; charset=utf-8" |
| direct_passthrough | bool | False | Если True, передавать тело ответа напрямую без какой-либо обработки. |
Основные атрибуты
| Свойство | Type | Описание |
|---|---|---|
| status | str | Статус ответа (в текстовой форме), например "200 OK" или "404 Not Found" |
| status_code | int | Коды состояния HTTP, например 200, 404 |
| headers | Headers | Объект заголовка ответа, поддерживает операции в стиле словаря |
| data | bytes | Байтовое представление тела ответа |
| mimetype | str | MIME-тип (без кодировки), например, "text/html" |
| content_type | str | Content-Type (включая charset), например, "text/html; charset=utf-8" |
| content_length | int | Длина тела ответа в байтах |
Операции с заголовками ответа
| Методы | Описание |
|---|---|
| headers.get(key) | Получить значение указанного заголовка ответа |
| headers[key] = value | Установить заголовки ответа |
| headers.update(dict) | Пакетное обновление заголовков ответа |
Операции с cookie
| Методы | Описание |
|---|---|
| set_cookie(key, value, max_age, expires, path, domain, secure, httponly, samesite) | Установить Cookie. max_age задаётся в секундах, expires — это datetime, secure — только HTTPS |
| delete_cookie(key, path, domain) | Удалить указанный Cookie |
| Параметры set_cookie: max_age | Время жизни Cookie в секундах, например, max_age=3600 означает 1 час |
| Параметры set_cookie: secure | По умолчанию используется значение конфигурации SESSION_COOKIE_SECURE; если True, отправляется только по HTTPS |
| Параметры set_cookie: httponly | По умолчанию True, что запрещает JavaScript доступ к этому Cookie |
| Параметры set_cookie: samesite | "Strict", "Lax" или None, управляющие поведением отправки кросс-сайтовых Cookie |
Другие методы
| Методы | Описание |
|---|---|
| get_json(force=False, silent=False) | Разобрать тело ответа как JSON (в основном используется для тестирования). |
| freeze() | Заморозить ответ в неизменяемое состояние |
| force_type(response, environ) | Метод класса, принудительно преобразующий другие типы ответов в тип Response. |
Примеры кода
Пример
from flask import Flask, make_response
app = Flask(__name__)
@app.route("/custom")
def custom_response():
# Используйте make_response для ручного создания ответа
resp = make_response("<h1>Привет, EXAMPLE!</h1>")
# Установите код состояния
resp.status_code = 201
# Установить пользовательские заголовки ответа
resp.headers["X-Custom-Header"] = "my-value"
# Установить Cookie
resp.set_cookie("theme", "dark", max_age=86400) # Действует 24 часа
resp.set_cookie("lang", "zh-CN", samesite="Lax") # Ограничение SameSite
return resp
@app.route("/delete-cookie")
def delete_cookie():
resp = make_response("Cookie удалён")
resp.delete_cookie("theme")
return resp
@app.route("/api/data")
def api_data():
# Вернуть dict напрямую; Flask автоматически сериализует его в JSON-ответ
return {"status": "ok", "data": [1, 2, 3]}
app = Flask(__name__)
@app.route("/custom")
def custom_response():
# Используйте make_response для ручного создания ответа
resp = make_response("<h1>Привет, EXAMPLE!</h1>")
# Установите код состояния
resp.status_code = 201
# Установить пользовательские заголовки ответа
resp.headers["X-Custom-Header"] = "my-value"
# Установить Cookie
resp.set_cookie("theme", "dark", max_age=86400) # Действует 24 часа
resp.set_cookie("lang", "zh-CN", samesite="Lax") # Ограничение SameSite
return resp
@app.route("/delete-cookie")
def delete_cookie():
resp = make_response("Cookie удалён")
resp.delete_cookie("theme")
return resp
@app.route("/api/data")
def api_data():
# Вернуть dict напрямую; Flask автоматически сериализует его в JSON-ответ
return {"status": "ok", "data": [1, 2, 3]}