API

Эта часть документации охватывает все интерфейсы Flask. Для частей, где Flask зависит от внешних библиотек, мы документируем наиболее важные прямо здесь и даем ссылки на каноническую документацию.

Объект приложения

class flask.Flask(import_name, static_url_path=None, static_folder='static', static_host=None, host_matching=False, subdomain_matching=False, template_folder='templates', instance_path=None, instance_relative_config=False, root_path=None)

Объект flask реализует приложение WSGI и действует как центральный объект. Ему передается имя модуля или пакета приложения. После его создания он будет действовать как центральный реестр для функций представления, правил URL, конфигурации шаблонов и многого другого.

Имя пакета используется для разрешения ресурсов внутри пакета или папки, в которой находится модуль, в зависимости от того, разрешает ли параметр package фактический пакет python (папка с файлом __init__.py внутри) или стандартный модуль (просто файл .py).

Для получения дополнительной информации о загрузке ресурсов смотрите open_resource().

Обычно вы создаете экземпляр Flask в вашем главном модуле или в __init__.py файле вашего пакета следующим образом:

from flask import Flask
app = Flask(__name__)

О первом параметре

Идея первого параметра заключается в том, чтобы дать Flask представление о том, что принадлежит вашему приложению. Это имя используется для поиска ресурсов в файловой системе, может использоваться расширениями для улучшения отладочной информации и многого другого.

Поэтому важно, что вы там указываете. Если вы используете отдельный модуль, то __name__ всегда будет правильным значением. Если же вы используете пакет, то обычно рекомендуется жестко указывать имя вашего пакета.

Например, если ваше приложение определено в yourapplication/app.py, вы должны создать его с одной из двух версий ниже:

app = Flask('yourapplication')
app = Flask(__name__.split('.')[0])

Почему? Приложение будет работать даже с __name__, благодаря тому, как происходит поиск ресурсов. Однако это сделает отладку более болезненной. Некоторые расширения могут делать предположения, основываясь на имени импорта вашего приложения. Например, расширение Flask-SQLAlchemy будет искать код в вашем приложении, который вызвал SQL-запрос в режиме отладки. Если имя импорта настроено неправильно, эта информация об отладке будет потеряна. (Например, оно будет определять SQL-запросы только в yourapplication.app, но не в yourapplication.views.frontend).

Changelog

Добавлено в версии 1.0: Были добавлены параметры host_matching и static_host.

Добавлено в версии 1.0: Добавлен параметр subdomain_matching. Теперь сопоставление субдоменов необходимо включать вручную. Установка SERVER_NAME не включает его неявно.

Добавлено в версии 0.11: Добавлен параметр root_path.

Добавлено в версии 0.8: Добавлены параметры instance_path и instance_relative_config.

Добавлено в версии 0.7: Добавлены параметры static_url_path, static_folder и template_folder.

Параметры:
  • import_name (str) – имя пакета приложений

  • static_url_path (Optional[str]) – можно использовать для указания другого пути для статических файлов в сети. По умолчанию используется имя папки static_folder.

  • static_folder (Optional[Union[str, PathLike]]) – Папка со статическими файлами, которая обслуживается по адресу static_url_path. Относительный к приложению root_path или абсолютный путь. По умолчанию 'static'.

  • static_host (Optional[str]) – хост, который будет использоваться при добавлении статического маршрута. По умолчанию установлено значение None. Требуется при использовании host_matching=True с настроенным static_folder.

  • host_matching (bool) – установить атрибут url_map.host_matching. По умолчанию имеет значение False.

  • subdomain_matching (bool) – учитывать поддомен относительно SERVER_NAME при подборе маршрутов. По умолчанию имеет значение False.

  • template_folder (Optional[Union[str, PathLike]]) – папка, содержащая шаблоны, которые должны использоваться приложением. По умолчанию это папка 'templates' в корневом пути приложения.

  • instance_path (Optional[str]) – Альтернативный путь к экземпляру приложения. По умолчанию за путь к экземпляру принимается папка 'instance' рядом с пакетом или модулем.

  • instance_relative_config (bool) – если установлено значение True относительные имена файлов для загрузки конфигурации считаются относительными к пути экземпляра, а не к корню приложения.

  • root_path (Optional[str]) – Путь к корню файлов приложения. Его следует задавать вручную только в том случае, если он не может быть определен автоматически, например, для пакетов пространства имен.

aborter

Экземпляр aborter_class, созданный make_aborter(). Он вызывается flask.abort(), чтобы вызвать ошибки HTTP, а также может быть вызван напрямую.

Добавлено в версии 2.2: Перемещено из flask.abort, который вызывает этот объект.

aborter_class

alias of Aborter

add_template_filter(f, name=None)

Регистрация пользовательского фильтра шаблона. Работает точно так же, как декоратор template_filter().

Параметры:
  • name (Optional[str]) – необязательное имя фильтра, иначе будет использовано имя функции.

  • f (Callable[[...], Any]) –

Тип результата:

None

add_template_global(f, name=None)

Регистрация глобальной функции пользовательского шаблона. Работает точно так же, как декоратор template_global().

Changelog

Добавлено в версии 0.10.

Параметры:
  • name (Optional[str]) – необязательное имя глобальной функции, иначе будет использовано имя функции.

  • f (Callable[[...], Any]) –

Тип результата:

None

add_template_test(f, name=None)

Регистрация пользовательского шаблона теста. Работает точно так же, как декоратор template_test().

Changelog

Добавлено в версии 0.10.

Параметры:
  • name (Optional[str]) – необязательное имя теста, иначе будет использовано имя функции.

  • f (Callable[[...], bool]) –

Тип результата:

None

add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, **options)

Зарегистрируйте правило для маршрутизации входящих запросов и построения URL. Декоратор route() является сокращением для вызова этого параметра с аргументом view_func. Это эквивалентно:

@app.route("/")
def index():
    ...
def index():
    ...

app.add_url_rule("/", view_func=index)

См. Регистрация маршрутов URL.

Имя конечной точки маршрута по умолчанию соответствует имени функции представления, если не передан параметр endpoint. Если функция уже зарегистрирована для конечной точки, будет выдана ошибка.

Параметр methods по умолчанию имеет значение ["GET"]. HEAD всегда добавляется автоматически, а OPTIONS добавляется автоматически по умолчанию.

view_func не обязательно передавать, но если правило должно участвовать в маршрутизации, имя конечной точки должно быть связано с функцией представления в какой-то момент с помощью декоратора endpoint().

app.add_url_rule("/", endpoint="index")

@app.endpoint("index")
def index():
    ...

Если view_func имеет атрибут required_methods, то эти методы добавляются к переданным и автоматическим методам. Если у него есть атрибут provide_automatic_methods, то он используется по умолчанию, если параметр не передан.

Параметры:
Тип результата:

None

after_request(f)

Зарегистрируйте функцию для запуска после каждого запроса к этому объекту.

Функция вызывается с объектом ответа и должна вернуть объект ответа. Это позволяет функции изменять или заменять ответ до его отправки.

Если функция вызывает исключение, все оставшиеся функции after_request не будут вызваны. Поэтому ее не следует использовать для действий, которые должны выполняться, например, для закрытия ресурсов. Для этого используйте teardown_request().

Эта функция доступна как для объектов приложения, так и для объектов чертежа. При использовании в приложении эта функция выполняется после каждого запроса. При использовании на blueprint, это выполняется после каждого запроса, который обрабатывает blueprint. Чтобы зарегистрироваться в blueprint и выполнять после каждого запроса, используйте Blueprint.after_app_request().

Параметры:

f (T_after_request) –

Тип результата:

T_after_request

after_request_funcs: t.Dict[ft.AppOrBlueprintKey, t.List[ft.AfterRequestCallable]]

Структура данных функций для вызова в конце каждого запроса, в формате {scope: [functions]}. Ключ scope - это имя чертежа, для которого активны функции, или None для всех запросов.

Чтобы зарегистрировать функцию, используйте декоратор after_request().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

app_context()

Создайте AppContext. Используйте в качестве блока with, чтобы подтолкнуть контекст, который заставит current_app указывать на это приложение.

Контекст приложения автоматически подталкивается RequestContext.push() при обработке запроса и при выполнении команды CLI. Используйте этот параметр для ручного создания контекста вне этих ситуаций.

with app.app_context():
    init_db()

См. Контекст приложения.

Changelog

Добавлено в версии 0.9.

Тип результата:

AppContext

app_ctx_globals_class

alias of _AppCtxGlobals

async_to_sync(func)

Возвращает функцию синхронизации, которая будет выполнять функцию coroutine.

result = app.async_to_sync(func)(*args, **kwargs)

Переопределите этот метод, чтобы изменить способ преобразования асинхронного кода в синхронно вызываемый.

Changelog

Добавлено в версии 2.0.

Параметры:

func (Callable[[...], Coroutine]) –

Тип результата:

Callable[[…], Any]

auto_find_instance_path()

Пытается найти путь к экземпляру, если он не был указан в конструкторе класса приложения. В основном вычисляется путь к папке с именем instance рядом с вашим главным файлом или пакетом.

Changelog

Добавлено в версии 0.8.

Тип результата:

str

before_first_request(f)

Регистрирует функцию для запуска перед первым запросом к данному экземпляру приложения.

Функция будет вызвана без аргументов, а ее возвращаемое значение будет проигнорировано.

Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3. Вместо этого запускайте код настройки при создании приложения.

Changelog

Добавлено в версии 0.8.

Параметры:

f (T_before_first_request) –

Тип результата:

T_before_first_request

before_first_request_funcs: t.List[ft.BeforeFirstRequestCallable]

Список функций, которые будут вызываться в начале первого запроса к данному экземпляру. Чтобы зарегистрировать функцию, используйте декоратор before_first_request().

Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3. Вместо этого запускайте код настройки при создании приложения.

Changelog

Добавлено в версии 0.8.

before_request(f)

Зарегистрируйте функцию, которая будет выполняться перед каждым запросом.

Например, это может использоваться для открытия соединения с базой данных или для загрузки вошедшего в систему пользователя из сессии.

@app.before_request
def load_user():
    if "user_id" in session:
        g.user = db.session.get(session["user_id"])

Функция будет вызвана без каких-либо аргументов. Если она возвращает значение не``None``, оно обрабатывается так, как если бы это было возвращаемое значение из представления, и дальнейшая обработка запроса прекращается.

Это доступно как для объектов приложения, так и для объектов чертежа. При использовании в приложении эта функция выполняется перед каждым запросом. При использовании на blueprint, это выполняется перед каждым запросом, который обрабатывает blueprint. Чтобы зарегистрироваться в blueprint и выполнять перед каждым запросом, используйте Blueprint.before_app_request().

Параметры:

f (T_before_request) –

Тип результата:

T_before_request

before_request_funcs: t.Dict[ft.AppOrBlueprintKey, t.List[ft.BeforeRequestCallable]]

Структура данных функций для вызова в начале каждого запроса в формате {scope: [functions]}. Ключ scope - это имя чертежа, для которого активны функции, или None для всех запросов.

Чтобы зарегистрировать функцию, используйте декоратор before_request().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

blueprints: t.Dict[str, 'Blueprint']

Сопоставляет зарегистрированные имена чертежей с объектами чертежей. Диктант сохраняет порядок, в котором были зарегистрированы чертежи. Чертежи могут быть зарегистрированы несколько раз, этот дикт не отслеживает, как часто они были присоединены.

Changelog

Добавлено в версии 0.7.

cli

Группа команд Click для регистрации команд CLI для данного объекта. Команды доступны из команды flask после обнаружения приложения и регистрации чертежей.

config

Словарь конфигурации в виде Config. Он ведет себя точно так же, как обычный словарь, но поддерживает дополнительные методы для загрузки конфигурации из файлов.

config_class

alias of Config

context_processor(f)

Регистрирует функцию контекстного процессора шаблона. Эти функции запускаются перед отрисовкой шаблона. Ключи возвращаемого dict добавляются в качестве переменных, доступных в шаблоне.

Эта функция доступна как для объектов приложения, так и для объектов чертежа. При использовании в приложении эта функция вызывается для каждого отрисованного шаблона. При использовании на blueprint, это вызывается для шаблонов, отрисованных из представлений blueprint. Чтобы зарегистрироваться в blueprint и повлиять на каждый шаблон, используйте Blueprint.app_context_processor().

Параметры:

f (T_template_context_processor) –

Тип результата:

T_template_context_processor

create_global_jinja_loader()

Создает загрузчик для среды Jinja2. Может быть использована для переопределения только загрузчика, а остальные функции остаются неизменными. Не рекомендуется переопределять эту функцию. Вместо этого следует переопределить функцию jinja_loader().

Глобальный загрузчик осуществляет диспетчеризацию между загрузчиками приложения и отдельных чертежей.

Changelog

Добавлено в версии 0.7.

Тип результата:

DispatchingJinjaLoader

create_jinja_environment()

Создайте окружение Jinja на основе jinja_options и различных методов приложения, связанных с Jinja. Изменение jinja_options после этого не будет иметь никакого эффекта. Также добавляет в окружение связанные с Flask глобальные файлы и фильтры.

Changelog

Изменено в версии 0.11: Environment.auto_reload устанавливается в соответствии с параметром конфигурации TEMPLATES_AUTO_RELOAD.

Добавлено в версии 0.5.

Тип результата:

Environment

create_url_adapter(request)

Создает адаптер URL для заданного запроса. URL-адаптер создается в тот момент, когда контекст запроса еще не установлен, поэтому запрос передается в явном виде.

Changelog

Изменено в версии 1.0: SERVER_NAME больше не включает неявное сопоставление поддоменов. Вместо этого используйте subdomain_matching.

Изменено в версии 0.9: Теперь его можно вызывать и без объекта запроса, когда URL-адаптер создается для контекста приложения.

Добавлено в версии 0.6.

Параметры:

request (Optional[Request]) –

Тип результата:

Optional[MapAdapter]

property debug: bool

Включен ли режим отладки. При использовании flask run для запуска сервера разработки, интерактивный отладчик будет показан для необработанных исключений, и сервер будет перезагружен при изменении кода. Этот параметр соответствует ключу конфигурации DEBUG. Она может вести себя не так, как ожидается, если установлена с опозданием.

Не включайте режим отладки при развертывании в производстве..

По умолчанию: False

default_config = {'APPLICATION_ROOT': '/', 'DEBUG': None, 'ENV': None, 'EXPLAIN_TEMPLATE_LOADING': False, 'JSONIFY_MIMETYPE': None, 'JSONIFY_PRETTYPRINT_REGULAR': None, 'JSON_AS_ASCII': None, 'JSON_SORT_KEYS': None, 'MAX_CONTENT_LENGTH': None, 'MAX_COOKIE_SIZE': 4093, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 'PREFERRED_URL_SCHEME': 'http', 'PROPAGATE_EXCEPTIONS': None, 'SECRET_KEY': None, 'SEND_FILE_MAX_AGE_DEFAULT': None, 'SERVER_NAME': None, 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_SAMESITE': None, 'SESSION_COOKIE_SECURE': False, 'SESSION_REFRESH_EACH_REQUEST': True, 'TEMPLATES_AUTO_RELOAD': None, 'TESTING': False, 'TRAP_BAD_REQUEST_ERRORS': None, 'TRAP_HTTP_EXCEPTIONS': False, 'USE_X_SENDFILE': False}

Параметры конфигурации по умолчанию.

delete(rule, **options)

Сокращение для route() с methods=["DELETE"].

Changelog

Добавлено в версии 2.0.

Параметры:
  • rule (str) –

  • options (Any) –

Тип результата:

Callable[[T_route], T_route]

dispatch_request()

Выполняет диспетчеризацию запроса. Сопоставляет URL и возвращает возвращаемое значение представления или обработчика ошибок. Это не обязательно должен быть объект ответа. Чтобы преобразовать возвращаемое значение в соответствующий объект ответа, вызовите make_response().

Changelog

Изменено в версии 0.7: Здесь больше не выполняется обработка исключений, этот код был перенесен в новый full_dispatch_request().

Тип результата:

Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], WSGIApplication]

do_teardown_appcontext(exc=<object object>)

Вызывается непосредственно перед разворачиванием контекста приложения.

При обработке запроса контекст приложения открывается после контекста запроса. См. do_teardown_request().

При этом вызываются все функции, украшенные teardown_appcontext(). Затем посылается сигнал appcontext_tearing_down.

Это вызывается командой AppContext.pop().

Changelog

Добавлено в версии 0.9.

Параметры:

exc (Optional[BaseException]) –

Тип результата:

None

do_teardown_request(exc=<object object>)

Вызывается после диспетчеризации запроса и возврата ответа, непосредственно перед тем, как контекст запроса будет выгружен.

При этом вызываются все функции, украшенные символом teardown_request(), и Blueprint.teardown_request(), если запрос обработал блюпринт. Наконец, посылается сигнал request_tearing_down.

Это вызывается командой RequestContext.pop(), которая может быть задержана во время тестирования для поддержания доступа к ресурсам.

Параметры:

exc (Optional[BaseException]) – Необработанное исключение, возникшее при диспетчеризации запроса. Определяется из текущей информации об исключении, если она не передана. Передается каждой функции завершения работы.

Тип результата:

None

Changelog

Изменено в версии 0.9: Добавлен аргумент exc.

endpoint(endpoint)

Украсьте функцию представления, чтобы зарегистрировать ее для заданной конечной точки. Используется, если правило добавляется без view_func с add_url_rule().

app.add_url_rule("/ex", endpoint="example")

@app.endpoint("example")
def example():
    ...
Параметры:

endpoint (str) – Имя конечной точки, которую нужно связать с функцией представления.

Тип результата:

Callable[[F], F]

ensure_sync(func)

Убедитесь, что функция является синхронной для рабочих WSGI. Простые функции def возвращаются как есть. Функции async def оборачиваются для запуска и ожидания ответа.

Переопределите этот метод, чтобы изменить способ выполнения асинхронных представлений в приложении.

Changelog

Добавлено в версии 2.0.

Параметры:

func (Callable) –

Тип результата:

Callable

property env: str

В какой среде работает приложение. Это соответствует ключу конфигурации ENV.

Не включайте разработку при развертывании в производстве..

По умолчанию: 'production'

Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3.

error_handler_spec: t.Dict[ft.AppOrBlueprintKey, t.Dict[t.Optional[int], t.Dict[t.Type[Exception], ft.ErrorHandlerCallable]]]

Структура данных зарегистрированных обработчиков ошибок в формате {scope: {code: {class: handler}}}. Ключ scope - это имя чертежа, для которого активны обработчики, или None для всех запросов. Ключ code - это код статуса HTTP для HTTPException, или None для других исключений. Внутренний словарь сопоставляет классы исключений с функциями обработчиков.

Чтобы зарегистрировать обработчик ошибок, используйте декоратор errorhandler().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

errorhandler(code_or_exception)

Зарегистрируйте функцию для обработки ошибок по коду или классу исключений.

Декоратор, который используется для регистрации функции с кодом ошибки. Пример:

@app.errorhandler(404)
def page_not_found(error):
    return 'This page does not exist', 404

Вы также можете зарегистрировать обработчики для произвольных исключений:

@app.errorhandler(DatabaseError)
def special_exception_handler(error):
    return 'Database connection failed', 500

Эта функция доступна как для приложений, так и для объектов blueprint. При использовании в приложении он может обрабатывать ошибки каждого запроса. При использовании на blueprint, это может обрабатывать ошибки запросов, которые обрабатывает blueprint. Чтобы зарегистрироваться в blueprint и влиять на каждый запрос, используйте Blueprint.app_errorhandler().

Changelog

Добавлено в версии 0.7: Используйте register_error_handler() вместо модификации error_handler_spec напрямую, для обработчиков ошибок для всего приложения.

Добавлено в версии 0.7: Теперь можно дополнительно регистрировать пользовательские типы исключений, которые не обязательно должны быть подклассом класса HTTPException.

Параметры:

code_or_exception (Union[Type[Exception], int]) – код как целое число для обработчика, или произвольное исключение

Тип результата:

Callable[[T_error_handler], T_error_handler]

extensions: dict

место, где расширения могут хранить специфическое состояние приложения. Например, здесь расширение может хранить движки баз данных и подобные вещи.

Ключ должен совпадать с именем модуля расширения. Например, в случае расширения «Flask-Foo» в flask_foo, ключ будет 'foo'.

Changelog

Добавлено в версии 0.7.

full_dispatch_request()

Отправляет запрос и, кроме того, выполняет предварительную и последующую обработку запроса, а также перехват исключений HTTP и обработку ошибок.

Changelog

Добавлено в версии 0.7.

Тип результата:

Response

get(rule, **options)

Сокращение для route() с methods=["GET"].

Changelog

Добавлено в версии 2.0.

Параметры:
  • rule (str) –

  • options (Any) –

Тип результата:

Callable[[T_route], T_route]

get_send_file_max_age(filename)

Используется send_file() для определения значения кэша max_age для данного пути к файлу, если он не был передан.

По умолчанию это возвращает SEND_FILE_MAX_AGE_DEFAULT из конфигурации current_app. По умолчанию это значение равно None, что говорит браузеру использовать условные запросы вместо таймерного кэша, что обычно предпочтительнее.

Changelog

Изменено в версии 2.0: По умолчанию вместо 12 часов используется None.

Добавлено в версии 0.9.

Параметры:

filename (Optional[str]) –

Тип результата:

Optional[int]

property got_first_request: bool

Этот атрибут имеет значение True, если приложение начало обрабатывать первый запрос.

Changelog

Добавлено в версии 0.8.

handle_exception(e)

Обработать исключение, которое не имеет обработчика ошибок, связанного с ним, или которое было вызвано из обработчика ошибок. Это всегда вызывает ошибку 500 InternalServerError.

Всегда посылает сигнал got_request_exception.

Если propagate_exceptions равно True, например, в режиме отладки, ошибка будет повторно поднята, чтобы отладчик мог ее отобразить. В противном случае исходное исключение регистрируется, и возвращается InternalServerError.

Если обработчик ошибок зарегистрирован для InternalServerError или 500, он будет использоваться. Для согласованности обработчик всегда будет получать InternalServerError. Исходное необработанное исключение доступно как e.original_exception.

Changelog

Изменено в версии 1.1.0: Всегда передает обработчику экземпляр InternalServerError, устанавливая original_exception на необработанную ошибку.

Изменено в версии 1.1.0: after_request функции и другая финализация выполняется даже для ответа 500 по умолчанию, когда обработчик отсутствует.

Добавлено в версии 0.3.

Параметры:

e (Exception) –

Тип результата:

Response

handle_http_exception(e)

Обрабатывает исключение HTTP. По умолчанию вызываются зарегистрированные обработчики ошибок и возвращается исключение в качестве ответа.

Changelog

Изменено в версии 1.0.3: RoutingException, используемый внутренне для таких действий, как перенаправление косой черты при маршрутизации, не передается обработчикам ошибок.

Изменено в версии 1.0: Исключения ищутся в коде и в MRO, поэтому подклассы HTTPException можно обрабатывать с помощью обработчика для базового HTTPException.

Добавлено в версии 0.3.

Параметры:

e (HTTPException) –

Тип результата:

Union[HTTPException, Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], WSGIApplication]

handle_url_build_error(error, endpoint, values)

Вызывается командой url_for(), если была вызвана ошибка BuildError. Если эта функция возвращает значение, оно будет возвращено командой url_for, в противном случае ошибка будет вызвана повторно.

Каждая функция в url_build_error_handlers вызывается с помощью error, endpoint и values. Если функция возвращает None или вызывает BuildError, она пропускается. В противном случае ее возвращаемое значение возвращается командой url_for.

Параметры:
  • error (BuildError) – Активный BuildError, который обрабатывается.

  • endpoint (str) – Строящаяся конечная точка.

  • values (Dict[str, Any]) – Аргументы ключевых слов, переданные в url_for.

Тип результата:

str

handle_user_exception(e)

Этот метод вызывается всякий раз, когда возникает исключение, которое необходимо обработать. Особым случаем является HTTPException, которое передается методу handle_http_exception(). Эта функция либо вернет значение ответа, либо повторно вызовет исключение с тем же возвратом.

Changelog

Изменено в версии 1.0: Ошибки ключа, вызванные данными запроса типа form, показывают плохой ключ в режиме отладки, а не общее сообщение о плохом запросе.

Добавлено в версии 0.7.

Параметры:

e (Exception) –

Тип результата:

Union[HTTPException, Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], WSGIApplication]

property has_static_folder: bool

True, если установлено static_folder.

Changelog

Добавлено в версии 0.5.

import_name

Имя пакета или модуля, к которому принадлежит данный объект. Не изменяйте это значение, если оно задано конструктором.

inject_url_defaults(endpoint, values)

Вставляет значения URL по умолчанию для данной конечной точки непосредственно в переданный словарь значений. Это используется внутри и автоматически вызывается при построении URL.

Changelog

Добавлено в версии 0.7.

Параметры:
  • endpoint (str) –

  • values (dict) –

Тип результата:

None

instance_path

Указывает путь к папке экземпляра.

Changelog

Добавлено в версии 0.8.

iter_blueprints()

Итерация по всем чертежам в порядке их регистрации.

Changelog

Добавлено в версии 0.11.

Тип результата:

ValuesView[Blueprint]

property jinja_env: Environment

Среда Jinja, используемая для загрузки шаблонов.

Среда создается при первом обращении к этому свойству. Изменение jinja_options после этого не будет иметь никакого эффекта.

jinja_environment

alias of Environment

property jinja_loader: Optional[FileSystemLoader]

Загрузчик Jinja для шаблонов этого объекта. По умолчанию это класс jinja2.loaders.FileSystemLoader в template_folder, если он установлен.

Changelog

Добавлено в версии 0.5.

jinja_options: dict = {}

Параметры, которые передаются в среду Jinja в create_jinja_environment(). Изменение этих параметров после создания окружения (обращение к jinja_env) не будет иметь никакого эффекта.

Changelog

Изменено в версии 1.1.0: Это dict вместо ImmutableDict для более простой настройки.

json: JSONProvider

Предоставляет доступ к методам JSON. Функции в flask.json будут вызывать методы этого провайдера, когда контекст приложения активен. Используется для обработки запросов и ответов JSON.

Экземпляр json_provider_class. Может быть настроен путем изменения этого атрибута в подклассе или путем последующего присвоения этому атрибуту.

По умолчанию, DefaultJSONProvider, используется встроенная библиотека Python json. Другой провайдер может использовать другую библиотеку JSON.

Добавлено в версии 2.2.

property json_decoder: Type[JSONDecoder]

Класс декодера JSON, который будет использоваться. По умолчанию JSONDecoder.

Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3. Вместо этого настройте json_provider_class.

Changelog

Добавлено в версии 0.10.

property json_encoder: Type[JSONEncoder]

Класс кодировщика JSON, который будет использоваться. По умолчанию используется JSONEncoder.

Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3. Вместо этого настройте json_provider_class.

Changelog

Добавлено в версии 0.10.

json_provider_class

alias of DefaultJSONProvider

log_exception(exc_info)

Записывает исключение в журнал. Вызывается handle_exception(), если отладка отключена, и непосредственно перед вызовом обработчика. Реализация по умолчанию регистрирует исключение как ошибку на logger.

Changelog

Добавлено в версии 0.8.

Параметры:

exc_info (Union[Tuple[type, BaseException, TracebackType], Tuple[None, None, None]]) –

Тип результата:

None

property logger: Logger

Стандартный Python Logger для приложения, с тем же именем, что и name.

В режиме отладки значение level регистратора будет установлено на DEBUG.

Если обработчики не настроены, будет добавлен обработчик по умолчанию. Для получения дополнительной информации смотрите Ведение журнала.

Changelog

Изменено в версии 1.1.0: Регистратор принимает то же имя, что и name, вместо жесткого кодирования "flask.app".

Изменено в версии 1.0.0: Поведение было упрощено. Регистратор всегда имеет имя "flask.app". Уровень устанавливается только во время конфигурации, он не проверяет app.debug каждый раз. Используется только один формат, а не разные в зависимости от app.debug. Никакие обработчики не удаляются, а добавляется обработчик только в том случае, если ни один из них еще не сконфигурирован.

Добавлено в версии 0.3.

make_aborter()

Создайте объект, который будет присвоен aborter. Этот объект вызывается flask.abort(), чтобы поднять ошибки HTTP, а также может быть вызван напрямую.

По умолчанию создается экземпляр aborter_class, который по умолчанию равен werkzeug.exceptions.Aborter.

Добавлено в версии 2.2.

Тип результата:

Aborter

make_config(instance_relative=False)

Используется для создания атрибута config конструктором Flask. Параметр instance_relative передается из конструктора Flask (там он называется instance_relative_config) и указывает, должен ли конфиг быть относительным к пути экземпляра или корневому пути приложения.

Changelog

Добавлено в версии 0.8.

Параметры:

instance_relative (bool) –

Тип результата:

Config

make_default_options_response()

Этот метод вызывается для создания ответа по умолчанию OPTIONS. Его можно изменить с помощью подклассов, чтобы изменить поведение ответов по умолчанию OPTIONS.

Changelog

Добавлено в версии 0.7.

Тип результата:

Response

make_response(rv)

Преобразование возвращаемого значения из функции представления в экземпляр response_class.

Параметры:

rv (Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, ...]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]) – возвращаемое значение из функции представления. Функция представления должна возвращать ответ. Возврат None или завершение представления без возврата не допускается. Для view_rv допускаются следующие типы: str Создается объект ответа со строкой, закодированной в UTF-8 в качестве тела. bytes Создается объект ответа с байтами в качестве тела. dict Словарь, который будет преобразован в jsonify перед возвратом. list Список, который будет подвергнут jsonify’s перед возвратом. generator или iterator Генератор, который возвращает str или bytes для потоковой передачи в качестве ответа. tuple Либо (body, status, headers), (body, status), либо (body, headers), где body - любой из других типов, разрешенных здесь, status - строка или целое число, а headers - словарь или список кортежей (key, value). Если body является экземпляром response_class, status перезаписывает выходящее значение и headers расширяется. response_class Объект возвращается без изменений. other Response class Объект принуждается к response_class. callable() Функция вызывается как приложение WSGI. Результат используется для создания объекта ответа.

Тип результата:

Response

Изменено в версии 2.2: Генератор будет преобразован в потоковый ответ. Список будет преобразован в ответ в формате JSON.

Changelog

Изменено в версии 1.1: Диктант будет преобразован в ответ в формате JSON.

Изменено в версии 0.9: Ранее кортеж интерпретировался как аргументы для объекта ответа.

make_shell_context()

Возвращает контекст оболочки для интерактивной оболочки для данного приложения. При этом запускаются все зарегистрированные процессоры контекста оболочки.

Changelog

Добавлено в версии 0.11.

Тип результата:

dict

property name: str

Имя приложения. Обычно это имя импорта с той разницей, что оно угадывается из файла запуска, если имя импорта - main. Это имя используется в качестве отображаемого имени, когда Flask требуется имя приложения. Его можно установить и переопределить, чтобы изменить значение.

Changelog

Добавлено в версии 0.8.

open_instance_resource(resource, mode='rb')

Открывает ресурс из папки экземпляра приложения (instance_path). В остальном работает как open_resource(). Ресурсы экземпляра также могут быть открыты для записи.

Параметры:
  • resource (str) – имя ресурса. Для доступа к ресурсам во вложенных папках используйте прямые косые черты в качестве разделителя.

  • mode (str) – режим открытия файла ресурса, по умолчанию „rb“.

Тип результата:

IO

open_resource(resource, mode='rb')

Открыть для чтения файл ресурсов относительно root_path.

Например, если файл schema.sql находится рядом с файлом app.py, в котором определено приложение Flask, его можно открыть с помощью:

with app.open_resource("schema.sql") as f:
    conn.executescript(f.read())
Параметры:
  • resource (str) – Путь к ресурсу относительно root_path.

  • mode (str) – Открыть файл в данном режиме. Поддерживается только чтение, допустимые значения - «r» (или «rt») и «rb».

Тип результата:

IO

patch(rule, **options)

Сокращение для route() с methods=["PATCH"].

Changelog

Добавлено в версии 2.0.

Параметры:
  • rule (str) –

  • options (Any) –

Тип результата:

Callable[[T_route], T_route]

permanent_session_lifetime

timedelta, который используется для установки даты истечения срока действия постоянной сессии. По умолчанию это 31 день, что позволяет постоянной сессии существовать примерно один месяц.

Этот атрибут также может быть настроен из конфигурации с помощью ключа конфигурации PERMANENT_SESSION_LIFETIME. По умолчанию установлено значение timedelta(days=31).

post(rule, **options)

Сокращение для route() с methods=["POST"].

Changelog

Добавлено в версии 2.0.

Параметры:
  • rule (str) –

  • options (Any) –

Тип результата:

Callable[[T_route], T_route]

preprocess_request()

Вызывается перед диспетчеризацией запроса. Вызывает url_value_preprocessors, зарегистрированный в приложении, и текущий blueprint (если есть). Затем вызывает before_request_funcs, зарегистрированный в приложении и блюпринте.

Если какой-либо обработчик before_request() возвращает значение не None, это значение обрабатывается так, как если бы это было возвращаемое значение из представления, и дальнейшая обработка запроса прекращается.

Тип результата:

Optional[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], WSGIApplication]]

process_response(response)

Может быть переопределена для изменения объекта ответа перед его отправкой на сервер WSGI. По умолчанию будут вызываться все декорированные функции after_request().

Changelog

Изменено в версии 0.5: Начиная с версии Flask 0.5 функции, зарегистрированные для выполнения после запроса, вызываются в обратном порядке регистрации.

Параметры:

response (Response) – объект response_class.

Результат:

новый объект ответа или тот же самый, должен быть экземпляром response_class.

Тип результата:

Response

property propagate_exceptions: bool

Возвращает значение конфигурационного значения PROPAGATE_EXCEPTIONS в случае, если оно установлено, иначе возвращается разумное значение по умолчанию.

Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3.

Changelog

Добавлено в версии 0.7.

put(rule, **options)

Сокращение для route() с methods=["PUT"].

Changelog

Добавлено в версии 2.0.

Параметры:
  • rule (str) –

  • options (Any) –

Тип результата:

Callable[[T_route], T_route]

redirect(location, code=302)

Создайте объект ответа перенаправления.

Она вызывается командой flask.redirect(), а также может быть вызвана напрямую.

Параметры:
  • location (str) – URL-адрес для перенаправления.

  • code (int) – Код состояния для перенаправления.

Тип результата:

Response

Добавлено в версии 2.2: Перемещено из flask.redirect, который вызывает этот метод.

register_blueprint(blueprint, **options)

Зарегистрировать Blueprint в приложении. Аргументы ключевых слов, переданные в этот метод, переопределяют значения по умолчанию, установленные в чертеже.

Вызывает метод register() blueprint после записи blueprint в blueprints приложения.

Параметры:
  • blueprint (Blueprint) – Чертеж для регистрации.

  • url_prefix – Маршруты чертежей будут иметь этот префикс.

  • subdomain – Маршруты Blueprint будут соответствовать этому поддомену.

  • url_defaults – Маршруты Blueprint будут использовать эти значения по умолчанию для аргументов представления.

  • options (Any) – Дополнительные аргументы ключевых слов передаются в BlueprintSetupState. К ним можно получить доступ в обратных вызовах record().

Тип результата:

None

Changelog

Изменено в версии 2.0.1: Опция name может быть использована для изменения (предварительно начертанного) имени, под которым зарегистрирован чертеж. Это позволяет регистрировать один и тот же чертеж несколько раз с уникальными именами url_for.

Добавлено в версии 0.7.

register_error_handler(code_or_exception, f)

Альтернативная функция присоединения ошибки к декоратору errorhandler(), более простая для использования без декоратора.

Changelog

Добавлено в версии 0.7.

Параметры:
Тип результата:

None

request_class

alias of Request

request_context(environ)

Создайте RequestContext, представляющий среду WSGI. Используйте блок with для толчка контекста, который заставит request указывать на этот запрос.

См. Контекст запроса.

Обычно не следует вызывать этот контекст из собственного кода. Контекст запроса автоматически подталкивается wsgi_app() при обработке запроса. Используйте test_request_context() для создания среды и контекста вместо этого метода.

Параметры:

environ (dict) – среда WSGI

Тип результата:

RequestContext

response_class

alias of Response

root_path

Абсолютный путь к пакету в файловой системе. Используется для поиска ресурсов, содержащихся в пакете.

route(rule, **options)

Украшает функцию представления, чтобы зарегистрировать ее с заданным правилом URL и опциями. Вызывает add_url_rule(), в котором есть более подробная информация о реализации.

@app.route("/")
def index():
    return "Hello, World!"

См. Регистрация маршрутов URL.

Имя конечной точки маршрута по умолчанию соответствует имени функции представления, если не передан параметр endpoint.

Параметр methods по умолчанию имеет значение ["GET"]. HEAD и OPTIONS добавляются автоматически.

Параметры:
  • rule (str) – Строка правила URL.

  • options (Any) – Дополнительные параметры, передаваемые объекту Rule.

Тип результата:

Callable[[T_route], T_route]

run(host=None, port=None, debug=None, load_dotenv=True, **options)

Запускает приложение на локальном сервере разработки.

Не используйте run() в производственных условиях. Он не предназначен для удовлетворения требований безопасности и производительности производственного сервера. Вместо этого смотрите Развертывание в производство для рекомендаций по использованию сервера WSGI.

Если установлен флаг debug, сервер будет автоматически перезагружаться при изменении кода и показывать отладчик в случае возникновения исключения.

Если вы хотите запустить приложение в режиме отладки, но отключить выполнение кода в интерактивном отладчике, вы можете передать use_evalex=False в качестве параметра. Это сохранит экран трассировки отладчика активным, но отключит выполнение кода.

Не рекомендуется использовать эту функцию для разработки с автоматической перезагрузкой, так как она плохо поддерживается. Вместо этого следует использовать поддержку flask скрипта командной строки run.

Имейте в виду

Flask будет подавлять любую ошибку сервера с помощью обычной страницы ошибок, если только он не находится в режиме отладки. Таким образом, чтобы включить только интерактивный отладчик без перезагрузки кода, необходимо вызвать run() с debug=True и use_reloader=False. Установка use_debugger на True без режима отладки не приведет к перехвату исключений, потому что их просто не будет.

Параметры:
  • host (Optional[str]) – имя хоста для прослушивания. Установите значение '0.0.0.0', чтобы сервер был доступен и извне. По умолчанию установлено значение '127.0.0.1' или хост в конфигурационной переменной SERVER_NAME, если она присутствует.

  • port (Optional[int]) – порт веб-сервера. По умолчанию равен 5000 или порту, определенному в конфигурационной переменной SERVER_NAME, если она присутствует.

  • debug (Optional[bool]) – если задан, включает или выключает режим отладки. См. debug.

  • load_dotenv (bool) – Загружает ближайшие файлы .env и .flaskenv для установки переменных окружения. Также изменит рабочий каталог на каталог, содержащий первый найденный файл.

  • options (Any) – опции, которые должны быть переданы базовому серверу Werkzeug. Дополнительную информацию см. в разделе werkzeug.serving.run_simple().

Тип результата:

None

Changelog

Изменено в версии 1.0: Если он установлен, python-dotenv будет использоваться для загрузки переменных окружения из файлов .env и .flaskenv.

Переменная окружения FLASK_DEBUG будет переопределять debug.

По умолчанию включен многопоточный режим.

Изменено в версии 0.10: Порт по умолчанию теперь выбирается из переменной SERVER_NAME.

secret_key

Если установлен секретный ключ, криптографические компоненты могут использовать его для подписи файлов cookie и других вещей. Установите это значение на сложное случайное значение, если вы хотите использовать, например, защищенный файл cookie.

Этот атрибут также может быть настроен из конфигурации с помощью ключа конфигурации SECRET_KEY. По умолчанию установлено значение None.

select_jinja_autoescape(filename)

Возвращает True, если для заданного имени шаблона должна быть активна автозамена. Если имя шаблона не задано, возвращается True.

Изменено в версии 2.2: Автозавершение теперь включено по умолчанию для файлов .svg.

Changelog

Добавлено в версии 0.5.

Параметры:

filename (str) –

Тип результата:

bool

property send_file_max_age_default: Optional[timedelta]

Значение по умолчанию для max_age для send_file(). По умолчанию используется значение None, которое указывает браузеру использовать условные запросы вместо таймерного кэша.

Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3. Вместо этого используйте app.config["SEND_FILE_MAX_AGE_DEFAULT"].

Changelog

Изменено в версии 2.0: По умолчанию вместо 12 часов установлено значение None.

send_static_file(filename)

Функция представления, используемая для обслуживания файлов из static_folder. Маршрут автоматически регистрируется для этого представления в static_url_path, если задано static_folder.

Changelog

Добавлено в версии 0.5.

Параметры:

filename (str) –

Тип результата:

Response

Имя файла cookie, установленного интерфейсом сеанса.

Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3. Вместо этого используйте app.config["SESSION_COOKIE_NAME"].

session_interface: SessionInterface = <flask.sessions.SecureCookieSessionInterface object>

используемый интерфейс сеанса. По умолчанию здесь используется экземпляр SecureCookieSessionInterface.

Changelog

Добавлено в версии 0.8.

shell_context_processor(f)

Регистрирует функцию контекстного процессора оболочки.

Changelog

Добавлено в версии 0.11.

Параметры:

f (T_shell_context_processor) –

Тип результата:

T_shell_context_processor

shell_context_processors: t.List[ft.ShellContextProcessorCallable]

Список функций процессора контекста оболочки, которые должны быть запущены при создании контекста оболочки.

Changelog

Добавлено в версии 0.11.

should_ignore_error(error)

Эта функция вызывается для того, чтобы выяснить, следует ли игнорировать ошибку или нет в отношении системы разрыва. Если эта функция возвращает True, то обработчикам разрыва ошибка передаваться не будет.

Changelog

Добавлено в версии 0.10.

Параметры:

error (Optional[BaseException]) –

Тип результата:

bool

property static_folder: Optional[str]

Абсолютный путь к настроенной статической папке. None, если статическая папка не задана.

property static_url_path: Optional[str]

Префикс URL, с которого будет доступен статический маршрут.

Если он не был настроен во время init, он берется из static_folder.

teardown_appcontext(f)

Регистрирует функцию, которая будет вызываться при разворачивании контекста приложения. Контекст приложения обычно разворачивается после контекста запроса для каждого запроса, в конце команд CLI или после завершения контекста, запущенного вручную.

with app.app_context():
    ...

Когда блок with завершается (или вызывается ctx.pop()), функции разрыва вызываются непосредственно перед тем, как контекст приложения становится неактивным. Поскольку контекст запроса обычно также управляет контекстом приложения, он также будет вызван при разрыве контекста запроса.

Если функция разрыва была вызвана из-за необработанного исключения, ей будет передан объект ошибки. Если зарегистрирован errorhandler(), он обработает исключение, и функция разрыва не получит его.

Функции разрушения должны избегать создания исключений. Если они выполняют код, который может завершиться неудачей, они должны окружить этот код блоком try/except и регистрировать все ошибки.

Возвращаемые значения функций разрыва игнорируются.

Changelog

Добавлено в версии 0.9.

Параметры:

f (T_teardown) –

Тип результата:

T_teardown

teardown_appcontext_funcs: t.List[ft.TeardownCallable]

Список функций, которые вызываются при разрушении контекста приложения. Поскольку контекст приложения также разрушается при завершении запроса, это место для хранения кода, который отсоединяется от баз данных.

Changelog

Добавлено в версии 0.9.

teardown_request(f)

Зарегистрируйте функцию, которая будет вызываться, когда контекст запроса будет вытолкнут. Обычно это происходит в конце каждого запроса, но контексты могут выталкиваться и вручную во время тестирования.

with app.test_request_context():
    ...

Когда блок with завершается (или вызывается ctx.pop()), функции разрыва вызываются непосредственно перед тем, как контекст запроса становится неактивным.

Если функция разрыва была вызвана из-за необработанного исключения, ей будет передан объект ошибки. Если зарегистрирован errorhandler(), он обработает исключение, и функция разрыва не получит его.

Функции разрушения должны избегать создания исключений. Если они выполняют код, который может завершиться неудачей, они должны окружить этот код блоком try/except и регистрировать все ошибки.

Возвращаемые значения функций разрыва игнорируются.

Эта функция доступна как для объектов приложения, так и для объектов чертежа. При использовании в приложении эта функция выполняется после каждого запроса. При использовании на blueprint, это выполняется после каждого запроса, который обрабатывает blueprint. Чтобы зарегистрироваться в blueprint и выполнять после каждого запроса, используйте Blueprint.teardown_app_request().

Параметры:

f (T_teardown) –

Тип результата:

T_teardown

teardown_request_funcs: t.Dict[ft.AppOrBlueprintKey, t.List[ft.TeardownCallable]]

Структура данных функций для вызова в конце каждого запроса, даже если возникло исключение, в формате {scope: [functions]}. Ключ scope - это имя чертежа, для которого активны функции, или None - для всех запросов.

Чтобы зарегистрировать функцию, используйте декоратор teardown_request().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

template_context_processors: t.Dict[ft.AppOrBlueprintKey, t.List[ft.TemplateContextProcessorCallable]]

Структура данных функций, вызываемых для передачи дополнительных значений контекста при рендеринге шаблонов, в формате {scope: [functions]}. Ключ scope - это имя чертежа, для которого активны функции, или None - для всех запросов.

Чтобы зарегистрировать функцию, используйте декоратор context_processor().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

template_filter(name=None)

Декоратор, который используется для регистрации пользовательского фильтра шаблона. Вы можете указать имя фильтра, в противном случае будет использовано имя функции. Пример:

@app.template_filter()
def reverse(s):
    return s[::-1]
Параметры:

name (Optional[str]) – необязательное имя фильтра, иначе будет использовано имя функции.

Тип результата:

Callable[[T_template_filter], T_template_filter]

template_folder

Путь к папке templates, относительно root_path, для добавления в загрузчик шаблонов. None, если шаблоны не должны добавляться.

template_global(name=None)

Декоратор, который используется для регистрации глобальной функции пользовательского шаблона. Вы можете указать имя глобальной функции, в противном случае будет использовано имя функции. Пример:

@app.template_global()
def double(n):
    return 2 * n
Changelog

Добавлено в версии 0.10.

Параметры:

name (Optional[str]) – необязательное имя глобальной функции, иначе будет использовано имя функции.

Тип результата:

Callable[[T_template_global], T_template_global]

template_test(name=None)

Декоратор, который используется для регистрации пользовательского теста шаблона. Вы можете указать имя теста, в противном случае будет использовано имя функции. Пример:

@app.template_test()
def is_prime(n):
    if n == 2:
        return True
    for i in range(2, int(math.ceil(math.sqrt(n))) + 1):
        if n % i == 0:
            return False
    return True
Changelog

Добавлено в версии 0.10.

Параметры:

name (Optional[str]) – необязательное имя теста, иначе будет использовано имя функции.

Тип результата:

Callable[[T_template_test], T_template_test]

property templates_auto_reload: bool

Перезагрузка шаблонов при их изменении. Используется командой create_jinja_environment(). По умолчанию включена в режиме отладки.

Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3. Вместо этого используйте app.config["TEMPLATES_AUTO_RELOAD"].

Changelog

Добавлено в версии 1.0: Это свойство было добавлено, но базовая конфигурация и поведение уже существовали.

test_cli_runner(**kwargs)

Создайте CLI runner для тестирования команд CLI. Смотрите Выполнение команд с помощью программы CLI Runner.

Возвращает экземпляр test_cli_runner_class, по умолчанию FlaskCliRunner. В качестве первого аргумента передается объект приложения Flask.

Changelog

Добавлено в версии 1.0.

Параметры:

kwargs (Any) –

Тип результата:

FlaskCliRunner

test_cli_runner_class: Optional[Type[FlaskCliRunner]] = None

Подкласс CliRunner, по умолчанию FlaskCliRunner, который используется test_cli_runner(). Его метод __init__ должен принимать в качестве первого аргумента объект Flask app.

Changelog

Добавлено в версии 1.0.

test_client(use_cookies=True, **kwargs)

Создает тестовый клиент для этого приложения. Для получения информации о модульном тестировании перейдите по ссылке Тестирование приложений Flask.

Обратите внимание, что если вы тестируете утверждения или исключения в коде вашего приложения, вы должны установить app.testing = True для того, чтобы исключения распространялись на тестовый клиент. В противном случае исключение будет обрабатываться приложением (не видимым для тестового клиента), и единственным признаком ошибки AssertionError или другого исключения будет ответ с кодом состояния 500 на тестовом клиенте. См. атрибут testing. Например:

app.testing = True
client = app.test_client()

Тестовый клиент можно использовать в блоке with, чтобы отложить закрытие контекста до конца блока with. Это полезно, если вы хотите получить доступ к локалям контекста для тестирования:

with app.test_client() as c:
    rv = c.get('/?vodka=42')
    assert request.args['vodka'] == '42'

Кроме того, вы можете передать необязательные ключевые аргументы, которые затем будут переданы в конструктор приложения test_client_class. Например:

from flask.testing import FlaskClient

class CustomClient(FlaskClient):
    def __init__(self, *args, **kwargs):
        self._authentication = kwargs.pop("authentication")
        super(CustomClient,self).__init__( *args, **kwargs)

app.test_client_class = CustomClient
client = app.test_client(authentication='Basic ....')

Для получения дополнительной информации см. раздел FlaskClient.

Changelog

Изменено в версии 0.11: Добавлено **kwargs для поддержки передачи дополнительных аргументов ключевых слов в конструктор test_client_class.

Добавлено в версии 0.7: Был добавлен параметр use_cookies, а также возможность переопределения используемого клиента путем установки атрибута test_client_class.

Изменено в версии 0.4: добавлена поддержка использования блока with для клиента.

Параметры:
  • use_cookies (bool) –

  • kwargs (Any) –

Тип результата:

FlaskClient

test_client_class: Optional[Type[FlaskClient]] = None

Метод test_client() создает экземпляр данного класса тестового клиента. По умолчанию имеет значение FlaskClient.

Changelog

Добавлено в версии 0.7.

test_request_context(*args, **kwargs)

Создайте RequestContext для среды WSGI, созданной из заданных значений. Это в основном полезно при тестировании, когда вы можете захотеть запустить функцию, которая использует данные запроса без отправки полного запроса.

См. Контекст запроса.

Используйте блок with для выталкивания контекста, который заставит request указать на запрос созданного окружения.

with test_request_context(...):
    generate_report()

При использовании оболочки может быть проще нажимать и разворачивать контекст вручную, чтобы избежать отступов.

ctx = app.test_request_context(...)
ctx.push()
...
ctx.pop()

Принимает те же аргументы, что и Werkzeug’s EnvironBuilder, с некоторыми значениями по умолчанию от приложения. Большинство доступных аргументов см. в документации Werkzeug по ссылке. Поведение, специфичное для Flask, перечислено здесь.

Параметры:
  • path – Запрашиваемый путь URL.

  • base_url – Базовый URL, по которому обслуживается приложение, который path является относительным. Если не указан, строится из PREFERRED_URL_SCHEME, subdomain, SERVER_NAME и APPLICATION_ROOT.

  • subdomain – Имя субдомена для добавления к SERVER_NAME.

  • url_scheme – Схема для использования вместо PREFERRED_URL_SCHEME.

  • data – Тело запроса, либо в виде строки, либо в виде диктанта ключей и значений формы.

  • json – Если задано, это сериализуется как JSON и передается как data. Также по умолчанию content_type имеет значение application/json.

  • args (Any) – другие позиционные аргументы, переданные в EnvironBuilder.

  • kwargs (Any) – другие аргументы ключевых слов, переданные в EnvironBuilder.

Тип результата:

RequestContext

testing

Флаг тестирования. Установите это значение True, чтобы включить режим тестирования расширений Flask (а в будущем, возможно, и самой Flask). Например, это может активировать тестовые помощники, которые имеют дополнительные затраты времени выполнения и не должны быть включены по умолчанию.

Если это включено, а PROPAGATE_EXCEPTIONS не изменен по умолчанию, то он неявно включен.

Этот атрибут также может быть настроен из конфигурации с помощью ключа конфигурации TESTING. По умолчанию установлено значение False.

trap_http_exception(e)

Проверяет, следует ли перехватывать исключение HTTP или нет. По умолчанию возвращает False для всех исключений, кроме ошибки плохого ключа запроса, если TRAP_BAD_REQUEST_ERRORS имеет значение True. Он также возвращает True, если TRAP_HTTP_EXCEPTIONS имеет значение True.

Вызывается для всех исключений HTTP, вызванных функцией представления. Если она возвращает True для любого исключения, обработчик ошибок для этого исключения не вызывается, и оно отображается как обычное исключение в обратном пути. Это полезно для отладки неявно вызванных HTTP-исключений.

Changelog

Изменено в версии 1.0: Ошибки плохого запроса не отлавливаются по умолчанию в режиме отладки.

Добавлено в версии 0.8.

Параметры:

e (Exception) –

Тип результата:

bool

update_template_context(context)

Обновление контекста шаблона с некоторыми часто используемыми переменными. При этом в контекст шаблона вводятся request, session, config и g, а также все, что хотят ввести обработчики контекста шаблона. Обратите внимание, что начиная с версии Flask 0.6, исходные значения в контексте не будут отменены, если обработчик контекста решит вернуть значение с тем же ключом.

Параметры:

context (dict) – контекст в виде словаря, который обновляется на месте для добавления дополнительных переменных.

Тип результата:

None

url_build_error_handlers: t.List[t.Callable[[Exception, str, t.Dict[str, t.Any]], str]]

Список функций, которые вызываются handle_url_build_error(), когда url_for() вызывает BuildError. Каждая функция вызывается с помощью error, endpoint и values. Если функция возвращает None или вызывает BuildError, она пропускается. В противном случае ее возвращаемое значение возвращается с помощью url_for.

Changelog

Добавлено в версии 0.9.

url_default_functions: t.Dict[ft.AppOrBlueprintKey, t.List[ft.URLDefaultCallable]]

Структура данных функций, вызываемых для изменения аргументов ключевых слов при генерации URL, в формате {scope: [functions]}. Ключ scope - это имя чертежа, для которого активны функции, или None - для всех запросов.

Чтобы зарегистрировать функцию, используйте декоратор url_defaults().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

url_defaults(f)

Функция обратного вызова для URL по умолчанию для всех функций представления приложения. Она вызывается с конечной точкой и значениями и должна обновить переданные значения.

Эта функция доступна как для объектов приложения, так и для объектов чертежа. При использовании в приложении эта функция вызывается для каждого запроса. При использовании на blueprint, это вызывается для запросов, которые обрабатывает blueprint. Чтобы зарегистрироваться в blueprint и влиять на каждый запрос, используйте Blueprint.app_url_defaults().

Параметры:

f (T_url_defaults) –

Тип результата:

T_url_defaults

url_for(endpoint, *, _anchor=None, _method=None, _scheme=None, _external=None, **values)

Генерирует URL-адрес к заданной конечной точке с заданными значениями.

Она вызывается командой flask.url_for(), а также может быть вызвана напрямую.

Конечная точка* - это имя правила URL, обычно добавляемое с помощью @app.route() и обычно совпадающее с именем функции представления. Маршрут, определенный в Blueprint, добавит к конечной точке имя чертежа, разделенное ..

В некоторых случаях, например, в сообщениях электронной почты, вы хотите, чтобы URL включали схему и домен, например https://example.com/hello. Когда нет активного запроса, URL по умолчанию будут внешними, но для этого нужно настроить SERVER_NAME, чтобы Flask знал, какой домен использовать. APPLICATION_ROOT и PREFERRED_URL_SCHEME также должны быть настроены по мере необходимости. Эта конфигурация используется только тогда, когда нет активного запроса.

Функции могут быть украшены url_defaults() для изменения аргументов ключевых слов до построения URL.

Если сборка не удается по какой-то причине, например, неизвестная конечная точка или неверные значения, вызывается метод приложения handle_url_build_error(). Если этот метод возвращает строку, то она возвращается, в противном случае возникает ошибка BuildError.

Параметры:
  • endpoint (str) – Имя конечной точки, связанное с генерируемым URL. Если оно начинается с ., будет использовано текущее имя чертежа (если оно есть).

  • _anchor (Optional[str]) – Если задано, добавьте это как #anchor к URL.

  • _method (Optional[str]) – Если задано, генерирует URL, связанный с этим методом, для конечной точки.

  • _scheme (Optional[str]) – Если задано, то URL будет иметь эту схему, если он является внешним.

  • _external (Optional[bool]) – Если задано, предпочтительно, чтобы URL был внутренним (False) или требуется, чтобы он был внешним (True). Внешние URL включают схему и домен. Когда URL не находится в активном запросе, он по умолчанию является внешним.

  • values (Any) – Значения, используемые для переменных частей правила URL. Неизвестные ключи добавляются в качестве аргументов строки запроса, например ?a=b&c=d.

Тип результата:

str

Добавлено в версии 2.2: Перемещено из flask.url_for, который вызывает этот метод.

url_map

Значение Map для данного экземпляра. Вы можете использовать его для изменения конвертеров маршрутизации после создания класса, но до подключения каких-либо маршрутов. Пример:

from werkzeug.routing import BaseConverter

class ListConverter(BaseConverter):
    def to_python(self, value):
        return value.split(',')
    def to_url(self, values):
        return ','.join(super(ListConverter, self).to_url(value)
                        for value in values)

app = Flask(__name__)
app.url_map.converters['list'] = ListConverter
url_map_class

alias of Map

url_rule_class

alias of Rule

url_value_preprocessor(f)

Зарегистрируйте функцию препроцессора значений URL для всех функций представления в приложении. Эти функции будут вызываться перед функциями before_request().

Функция может изменять значения, полученные из сопоставленного url, перед тем, как они будут переданы в представление. Например, это может быть использовано для того, чтобы вытащить значение кода общего языка и поместить его в g, а не передавать его каждому представлению.

Функции передается имя конечной точки и диктат значений. Возвращаемое значение игнорируется.

Эта функция доступна как для объектов приложения, так и для объектов чертежа. При использовании в приложении эта функция вызывается для каждого запроса. При использовании на blueprint, это вызывается для запросов, которые обрабатывает blueprint. Чтобы зарегистрироваться в blueprint и влиять на каждый запрос, используйте Blueprint.app_url_value_preprocessor().

Параметры:

f (T_url_value_preprocessor) –

Тип результата:

T_url_value_preprocessor

url_value_preprocessors: t.Dict[ft.AppOrBlueprintKey, t.List[ft.URLValuePreprocessorCallable]]

Структура данных функций, вызываемых для изменения аргументов ключевых слов, переданных функции представления, в формате {scope: [functions]}. Ключ scope - это имя чертежа, для которого активны функции, или None для всех запросов.

Чтобы зарегистрировать функцию, используйте декоратор url_value_preprocessor().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

property use_x_sendfile: bool

Включите эту опцию, чтобы использовать функцию X-Sendfile, если сервер поддерживает ее, с send_file().

Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3. Вместо этого используйте app.config["USE_X_SENDFILE"].

view_functions: t.Dict[str, t.Callable]

Словарь, отображающий имена конечных точек на функции представления.

Чтобы зарегистрировать функцию представления, используйте декоратор route().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

wsgi_app(environ, start_response)

Собственно приложение WSGI. Это не реализовано в __call__(), чтобы промежуточные модули можно было применять без потери ссылки на объект app. Вместо этого можно сделать следующее:

app = MyMiddleware(app)

Вместо этого лучше сделать следующее:

app.wsgi_app = MyMiddleware(app.wsgi_app)

Тогда у вас все еще есть исходный объект приложения, и вы можете продолжать вызывать методы на нем.

Changelog

Изменено в версии 0.7: События Teardown для контекстов запроса и приложения вызываются, даже если произошла необработанная ошибка. Другие события могут не вызываться в зависимости от того, когда произошла ошибка во время диспетчеризации. См. Обратные вызовы и ошибки.

Параметры:
  • environ (dict) – Среда WSGI.

  • start_response (Callable) – Вызываемый объект, принимающий код состояния, список заголовков и необязательный контекст исключения для начала ответа.

Тип результата:

Any

Объекты чертежа

class flask.Blueprint(name, import_name, static_folder=None, static_url_path=None, template_folder=None, url_prefix=None, subdomain=None, url_defaults=None, root_path=None, cli_group=<object object>)

Представляет собой чертеж, коллекцию маршрутов и других функций, связанных с приложением, которые впоследствии могут быть зарегистрированы в реальном приложении.

Blueprint - это объект, который позволяет определять функции приложения, не требуя предварительного создания объекта приложения. Он использует те же декораторы, что и Flask, но откладывает необходимость в приложении, записывая их для последующей регистрации.

Украшение функции чертежом создает отложенную функцию, которая вызывается с помощью BlueprintSetupState, когда чертеж регистрируется в приложении.

Для получения дополнительной информации см. раздел Модульные приложения с чертежами.

Параметры:
  • name (str) – Имя чертежа. Будет добавлено к имени каждой конечной точки.

  • import_name (str) – Имя пакета чертежа, обычно __name__. Это помогает найти root_path для чертежа.

  • static_folder (Optional[Union[str, PathLike]]) – Папка со статическими файлами, которые должны обслуживаться статическим маршрутом чертежа. Путь является относительным к корневому пути blueprint’а. По умолчанию статические файлы чертежа отключены.

  • static_url_path (Optional[str]) – url для обслуживания статических файлов. По умолчанию используется значение static_folder. Если у чертежа нет url_prefix, статический маршрут приложения будет иметь приоритет, и статические файлы чертежа будут недоступны.

  • template_folder (Optional[Union[str, PathLike]]) – Папка с шаблонами, которые должны быть добавлены в путь поиска шаблонов приложения. Путь является относительным к корневому пути чертежа. По умолчанию шаблоны чертежей отключены. Шаблоны чертежей имеют более низкий приоритет, чем шаблоны в папке шаблонов приложения.

  • url_prefix (Optional[str]) – Путь, который добавляется ко всем URL-адресам чертежа, чтобы они отличались от остальных маршрутов приложения.

  • subdomain (Optional[str]) – Поддомен, с которым маршруты blueprint будут сопоставляться по умолчанию.

  • url_defaults (Optional[dict]) – Диктант значений по умолчанию, которые маршруты blueprint будут получать по умолчанию.

  • root_path (Optional[str]) – По умолчанию чертеж автоматически определяет этот путь на основе import_name. В некоторых ситуациях это автоматическое определение может не сработать, поэтому путь можно указать вручную.

  • cli_group (Optional[str]) –

Changelog

Изменено в версии 1.1.0: В чертежах есть группа cli для регистрации вложенных команд CLI. Параметр cli_group управляет именем группы под командой flask.

Добавлено в версии 0.7.

add_app_template_filter(f, name=None)

Регистрация фильтра шаблона, доступного в любом шаблоне, отображаемом приложением. Работает аналогично декоратору app_template_filter(). Эквивалентен Flask.add_template_filter().

Параметры:
  • name (Optional[str]) – необязательное имя фильтра, иначе будет использовано имя функции.

  • f (Callable[[...], Any]) –

Тип результата:

None

add_app_template_global(f, name=None)

Регистрирует глобальный шаблон, доступный в любом шаблоне, отображаемом приложением. Работает аналогично декоратору app_template_global(). Эквивалентен Flask.add_template_global().

Changelog

Добавлено в версии 0.10.

Параметры:
  • name (Optional[str]) – необязательное имя глобала, иначе будет использовано имя функции.

  • f (Callable[[...], Any]) –

Тип результата:

None

add_app_template_test(f, name=None)

Регистрация теста шаблона, доступного в любом шаблоне, отображаемом приложением. Работает аналогично декоратору app_template_test(). Эквивалентен Flask.add_template_test().

Changelog

Добавлено в версии 0.10.

Параметры:
  • name (Optional[str]) – необязательное имя теста, иначе будет использовано имя функции.

  • f (Callable[[...], bool]) –

Тип результата:

None

add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, **options)

Зарегистрируйте правило URL в чертеже. Смотрите Flask.add_url_rule() для получения полной документации.

Правило URL имеет префикс URL чертежа. Имя конечной точки, используемое с url_for(), имеет префикс имени чертежа.

Параметры:
Тип результата:

None

after_app_request(f)

Как after_request(), но после каждого запроса, а не только тех, которые обрабатываются чертежом. Эквивалентно Flask.after_request().

Параметры:

f (T_after_request) –

Тип результата:

T_after_request

after_request(f)

Зарегистрируйте функцию для запуска после каждого запроса к этому объекту.

Функция вызывается с объектом ответа и должна вернуть объект ответа. Это позволяет функции изменять или заменять ответ до его отправки.

Если функция вызывает исключение, все оставшиеся функции after_request не будут вызваны. Поэтому ее не следует использовать для действий, которые должны выполняться, например, для закрытия ресурсов. Для этого используйте teardown_request().

Эта функция доступна как для объектов приложения, так и для объектов чертежа. При использовании в приложении эта функция выполняется после каждого запроса. При использовании на blueprint, это выполняется после каждого запроса, который обрабатывает blueprint. Чтобы зарегистрироваться в blueprint и выполнять после каждого запроса, используйте Blueprint.after_app_request().

Параметры:

f (T_after_request) –

Тип результата:

T_after_request

after_request_funcs: t.Dict[ft.AppOrBlueprintKey, t.List[ft.AfterRequestCallable]]

Структура данных функций для вызова в конце каждого запроса, в формате {scope: [functions]}. Ключ scope - это имя чертежа, для которого активны функции, или None для всех запросов.

Чтобы зарегистрировать функцию, используйте декоратор after_request().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

app_context_processor(f)

Аналогично context_processor(), но для шаблонов, отображаемых каждым видом, а не только чертежом. Эквивалентно Flask.context_processor().

Параметры:

f (T_template_context_processor) –

Тип результата:

T_template_context_processor

app_errorhandler(code)

Как errorhandler(), но для каждого запроса, а не только для тех, которые обрабатываются чертежом. Эквивалентно Flask.errorhandler().

Параметры:

code (Union[Type[Exception], int]) –

Тип результата:

Callable[[T_error_handler], T_error_handler]

app_template_filter(name=None)

Регистрация фильтра шаблона, доступного в любом шаблоне, отображаемом приложением. Эквивалентно Flask.template_filter().

Параметры:

name (Optional[str]) – необязательное имя фильтра, иначе будет использовано имя функции.

Тип результата:

Callable[[T_template_filter], T_template_filter]

app_template_global(name=None)

Регистрация глобального шаблона, доступного в любом шаблоне, отображаемом приложением. Эквивалентно Flask.template_global().

Changelog

Добавлено в версии 0.10.

Параметры:

name (Optional[str]) – необязательное имя глобала, иначе будет использовано имя функции.

Тип результата:

Callable[[T_template_global], T_template_global]

app_template_test(name=None)

Регистрация теста шаблона, доступного в любом шаблоне, отображаемом приложением. Эквивалентно Flask.template_test().

Changelog

Добавлено в версии 0.10.

Параметры:

name (Optional[str]) – необязательное имя теста, иначе будет использовано имя функции.

Тип результата:

Callable[[T_template_test], T_template_test]

app_url_defaults(f)

Как url_defaults(), но для каждого запроса, а не только для тех, которые обрабатываются чертежом. Эквивалентно Flask.url_defaults().

Параметры:

f (T_url_defaults) –

Тип результата:

T_url_defaults

app_url_value_preprocessor(f)

Как url_value_preprocessor(), но для каждого запроса, а не только для тех, которые обрабатываются чертежом. Эквивалентно Flask.url_value_preprocessor().

Параметры:

f (T_url_value_preprocessor) –

Тип результата:

T_url_value_preprocessor

before_app_first_request(f)

Зарегистрируйте функцию для выполнения перед тем, как первый запрос к приложению будет обработан рабочим. Эквивалентно Flask.before_first_request().

Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3. Вместо этого запускайте код настройки при создании приложения.

Параметры:

f (T_before_first_request) –

Тип результата:

T_before_first_request

before_app_request(f)

Как before_request(), но перед каждым запросом, а не только перед теми, которые обрабатываются чертежом. Эквивалентно Flask.before_request().

Параметры:

f (T_before_request) –

Тип результата:

T_before_request

before_request(f)

Зарегистрируйте функцию, которая будет выполняться перед каждым запросом.

Например, это может использоваться для открытия соединения с базой данных или для загрузки вошедшего в систему пользователя из сессии.

@app.before_request
def load_user():
    if "user_id" in session:
        g.user = db.session.get(session["user_id"])

Функция будет вызвана без каких-либо аргументов. Если она возвращает значение не``None``, оно обрабатывается так, как если бы это было возвращаемое значение из представления, и дальнейшая обработка запроса прекращается.

Это доступно как для объектов приложения, так и для объектов чертежа. При использовании в приложении эта функция выполняется перед каждым запросом. При использовании на blueprint, это выполняется перед каждым запросом, который обрабатывает blueprint. Чтобы зарегистрироваться в blueprint и выполнять перед каждым запросом, используйте Blueprint.before_app_request().

Параметры:

f (T_before_request) –

Тип результата:

T_before_request

before_request_funcs: t.Dict[ft.AppOrBlueprintKey, t.List[ft.BeforeRequestCallable]]

Структура данных функций для вызова в начале каждого запроса в формате {scope: [functions]}. Ключ scope - это имя чертежа, для которого активны функции, или None для всех запросов.

Чтобы зарегистрировать функцию, используйте декоратор before_request().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

cli

Группа команд Click для регистрации команд CLI для данного объекта. Команды доступны из команды flask после обнаружения приложения и регистрации чертежей.

context_processor(f)

Регистрирует функцию контекстного процессора шаблона. Эти функции запускаются перед отрисовкой шаблона. Ключи возвращаемого dict добавляются в качестве переменных, доступных в шаблоне.

Эта функция доступна как для объектов приложения, так и для объектов чертежа. При использовании в приложении эта функция вызывается для каждого отрисованного шаблона. При использовании на blueprint, это вызывается для шаблонов, отрисованных из представлений blueprint. Чтобы зарегистрироваться в blueprint и повлиять на каждый шаблон, используйте Blueprint.app_context_processor().

Параметры:

f (T_template_context_processor) –

Тип результата:

T_template_context_processor

delete(rule, **options)

Сокращение для route() с methods=["DELETE"].

Changelog

Добавлено в версии 2.0.

Параметры:
  • rule (str) –

  • options (Any) –

Тип результата:

Callable[[T_route], T_route]

endpoint(endpoint)

Украсьте функцию представления, чтобы зарегистрировать ее для заданной конечной точки. Используется, если правило добавляется без view_func с add_url_rule().

app.add_url_rule("/ex", endpoint="example")

@app.endpoint("example")
def example():
    ...
Параметры:

endpoint (str) – Имя конечной точки, которую нужно связать с функцией представления.

Тип результата:

Callable[[F], F]

error_handler_spec: t.Dict[ft.AppOrBlueprintKey, t.Dict[t.Optional[int], t.Dict[t.Type[Exception], ft.ErrorHandlerCallable]]]

Структура данных зарегистрированных обработчиков ошибок в формате {scope: {code: {class: handler}}}. Ключ scope - это имя чертежа, для которого активны обработчики, или None для всех запросов. Ключ code - это код статуса HTTP для HTTPException, или None для других исключений. Внутренний словарь сопоставляет классы исключений с функциями обработчиков.

Чтобы зарегистрировать обработчик ошибок, используйте декоратор errorhandler().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

errorhandler(code_or_exception)

Зарегистрируйте функцию для обработки ошибок по коду или классу исключений.

Декоратор, который используется для регистрации функции с кодом ошибки. Пример:

@app.errorhandler(404)
def page_not_found(error):
    return 'This page does not exist', 404

Вы также можете зарегистрировать обработчики для произвольных исключений:

@app.errorhandler(DatabaseError)
def special_exception_handler(error):
    return 'Database connection failed', 500

Эта функция доступна как для приложений, так и для объектов blueprint. При использовании в приложении он может обрабатывать ошибки каждого запроса. При использовании на blueprint, это может обрабатывать ошибки запросов, которые обрабатывает blueprint. Чтобы зарегистрироваться в blueprint и влиять на каждый запрос, используйте Blueprint.app_errorhandler().

Changelog

Добавлено в версии 0.7: Используйте register_error_handler() вместо модификации error_handler_spec напрямую, для обработчиков ошибок для всего приложения.

Добавлено в версии 0.7: Теперь можно дополнительно регистрировать пользовательские типы исключений, которые не обязательно должны быть подклассом класса HTTPException.

Параметры:

code_or_exception (Union[Type[Exception], int]) – код как целое число для обработчика, или произвольное исключение

Тип результата:

Callable[[T_error_handler], T_error_handler]

get(rule, **options)

Сокращение для route() с methods=["GET"].

Changelog

Добавлено в версии 2.0.

Параметры:
  • rule (str) –

  • options (Any) –

Тип результата:

Callable[[T_route], T_route]

get_send_file_max_age(filename)

Используется send_file() для определения значения кэша max_age для данного пути к файлу, если он не был передан.

По умолчанию это возвращает SEND_FILE_MAX_AGE_DEFAULT из конфигурации current_app. По умолчанию это значение равно None, что говорит браузеру использовать условные запросы вместо таймерного кэша, что обычно предпочтительнее.

Changelog

Изменено в версии 2.0: По умолчанию вместо 12 часов используется None.

Добавлено в версии 0.9.

Параметры:

filename (Optional[str]) –

Тип результата:

Optional[int]

property has_static_folder: bool

True, если установлено static_folder.

Changelog

Добавлено в версии 0.5.

import_name

Имя пакета или модуля, к которому принадлежит данный объект. Не изменяйте это значение, если оно задано конструктором.

property jinja_loader: Optional[FileSystemLoader]

Загрузчик Jinja для шаблонов этого объекта. По умолчанию это класс jinja2.loaders.FileSystemLoader в template_folder, если он установлен.

Changelog

Добавлено в версии 0.5.

property json_decoder: Optional[Type[JSONDecoder]]

Локальный класс декодера JSON для использования. Установите значение None для использования приложения.

Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3. Вместо этого настройте json_provider_class.

Changelog

Добавлено в версии 0.10.

property json_encoder: Optional[Type[JSONEncoder]]

Локальный класс кодировщика JSON для использования. Установите значение None для использования приложения.

Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3. Вместо этого настройте json_provider_class.

Changelog

Добавлено в версии 0.10.

make_setup_state(app, options, first_registration=False)

Создает экземпляр объекта BlueprintSetupState(), который впоследствии передается функциям обратного вызова регистра. Подклассы могут переопределить эту функцию, чтобы вернуть подкласс состояния настройки.

Параметры:
  • app (Flask) –

  • options (dict) –

  • first_registration (bool) –

Тип результата:

BlueprintSetupState

open_resource(resource, mode='rb')

Открыть для чтения файл ресурсов относительно root_path.

Например, если файл schema.sql находится рядом с файлом app.py, в котором определено приложение Flask, его можно открыть с помощью:

with app.open_resource("schema.sql") as f:
    conn.executescript(f.read())
Параметры:
  • resource (str) – Путь к ресурсу относительно root_path.

  • mode (str) – Открыть файл в данном режиме. Поддерживается только чтение, допустимые значения - «r» (или «rt») и «rb».

Тип результата:

IO

patch(rule, **options)

Сокращение для route() с methods=["PATCH"].

Changelog

Добавлено в версии 2.0.

Параметры:
  • rule (str) –

  • options (Any) –

Тип результата:

Callable[[T_route], T_route]

post(rule, **options)

Сокращение для route() с methods=["POST"].

Changelog

Добавлено в версии 2.0.

Параметры:
  • rule (str) –

  • options (Any) –

Тип результата:

Callable[[T_route], T_route]

put(rule, **options)

Сокращение для route() с methods=["PUT"].

Changelog

Добавлено в версии 2.0.

Параметры:
  • rule (str) –

  • options (Any) –

Тип результата:

Callable[[T_route], T_route]

record(func)

Регистрирует функцию, которая вызывается при регистрации чертежа в приложении. Эта функция вызывается с состоянием в качестве аргумента, возвращаемым методом make_setup_state().

Параметры:

func (Callable) –

Тип результата:

None

record_once(func)

Работает как record(), но оборачивает функцию в другую функцию, которая гарантирует, что функция будет вызвана только один раз. Если blueprint регистрируется в приложении второй раз, переданная функция не будет вызвана.

Параметры:

func (Callable) –

Тип результата:

None

register(app, options)

Вызывается Flask.register_blueprint() для регистрации всех представлений и обратных вызовов, зарегистрированных на чертеже, в приложении. Создает BlueprintSetupState и вызывает с его помощью каждый обратный вызов record().

Параметры:
  • app (Flask) – Приложение, в котором регистрируется данный чертеж.

  • options (dict) – Аргументы ключевых слов пересылаются из register_blueprint().

Тип результата:

None

Changelog

Изменено в версии 2.0.1: Вложенные чертежи регистрируются с их точечным именем. Это позволяет различным чертежам с одинаковым именем быть вложенными в разные места.

Изменено в версии 2.0.1: Опция name может быть использована для изменения (предварительно начертанного) имени, под которым зарегистрирован чертеж. Это позволяет регистрировать один и тот же чертеж несколько раз с уникальными именами url_for.

Изменено в версии 2.0.1: Регистрация одного и того же чертежа с одним и тем же именем несколько раз устарела и станет ошибкой во Flask 2.1.

register_blueprint(blueprint, **options)

Зарегистрировать Blueprint на этом чертеже. Аргументы ключевых слов, переданные в этот метод, переопределяют значения по умолчанию, установленные для данного чертежа.

Changelog

Изменено в версии 2.0.1: Опция name может быть использована для изменения (предварительно начертанного) имени, под которым зарегистрирован чертеж. Это позволяет регистрировать один и тот же чертеж несколько раз с уникальными именами url_for.

Добавлено в версии 2.0.

Параметры:
Тип результата:

None

register_error_handler(code_or_exception, f)

Альтернативная функция присоединения ошибки к декоратору errorhandler(), более простая для использования без декоратора.

Changelog

Добавлено в версии 0.7.

Параметры:
Тип результата:

None

root_path

Абсолютный путь к пакету в файловой системе. Используется для поиска ресурсов, содержащихся в пакете.

route(rule, **options)

Украшает функцию представления, чтобы зарегистрировать ее с заданным правилом URL и опциями. Вызывает add_url_rule(), в котором есть более подробная информация о реализации.

@app.route("/")
def index():
    return "Hello, World!"

См. Регистрация маршрутов URL.

Имя конечной точки маршрута по умолчанию соответствует имени функции представления, если не передан параметр endpoint.

Параметр methods по умолчанию имеет значение ["GET"]. HEAD и OPTIONS добавляются автоматически.

Параметры:
  • rule (str) – Строка правила URL.

  • options (Any) – Дополнительные параметры, передаваемые объекту Rule.

Тип результата:

Callable[[T_route], T_route]

send_static_file(filename)

Функция представления, используемая для обслуживания файлов из static_folder. Маршрут автоматически регистрируется для этого представления в static_url_path, если задано static_folder.

Changelog

Добавлено в версии 0.5.

Параметры:

filename (str) –

Тип результата:

Response

property static_folder: Optional[str]

Абсолютный путь к настроенной статической папке. None, если статическая папка не задана.

property static_url_path: Optional[str]

Префикс URL, с которого будет доступен статический маршрут.

Если он не был настроен во время init, он берется из static_folder.

teardown_app_request(f)

Как teardown_request(), но после каждого запроса, а не только тех, которые обрабатываются чертежом. Эквивалентно Flask.teardown_request().

Параметры:

f (T_teardown) –

Тип результата:

T_teardown

teardown_request(f)

Зарегистрируйте функцию, которая будет вызываться, когда контекст запроса будет вытолкнут. Обычно это происходит в конце каждого запроса, но контексты могут выталкиваться и вручную во время тестирования.

with app.test_request_context():
    ...

Когда блок with завершается (или вызывается ctx.pop()), функции разрыва вызываются непосредственно перед тем, как контекст запроса становится неактивным.

Если функция разрыва была вызвана из-за необработанного исключения, ей будет передан объект ошибки. Если зарегистрирован errorhandler(), он обработает исключение, и функция разрыва не получит его.

Функции разрушения должны избегать создания исключений. Если они выполняют код, который может завершиться неудачей, они должны окружить этот код блоком try/except и регистрировать все ошибки.

Возвращаемые значения функций разрыва игнорируются.

Эта функция доступна как для объектов приложения, так и для объектов чертежа. При использовании в приложении эта функция выполняется после каждого запроса. При использовании на blueprint, это выполняется после каждого запроса, который обрабатывает blueprint. Чтобы зарегистрироваться в blueprint и выполнять после каждого запроса, используйте Blueprint.teardown_app_request().

Параметры:

f (T_teardown) –

Тип результата:

T_teardown

teardown_request_funcs: t.Dict[ft.AppOrBlueprintKey, t.List[ft.TeardownCallable]]

Структура данных функций для вызова в конце каждого запроса, даже если возникло исключение, в формате {scope: [functions]}. Ключ scope - это имя чертежа, для которого активны функции, или None - для всех запросов.

Чтобы зарегистрировать функцию, используйте декоратор teardown_request().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

template_context_processors: t.Dict[ft.AppOrBlueprintKey, t.List[ft.TemplateContextProcessorCallable]]

Структура данных функций, вызываемых для передачи дополнительных значений контекста при рендеринге шаблонов, в формате {scope: [functions]}. Ключ scope - это имя чертежа, для которого активны функции, или None - для всех запросов.

Чтобы зарегистрировать функцию, используйте декоратор context_processor().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

template_folder

Путь к папке templates, относительно root_path, для добавления в загрузчик шаблонов. None, если шаблоны не должны добавляться.

url_default_functions: t.Dict[ft.AppOrBlueprintKey, t.List[ft.URLDefaultCallable]]

Структура данных функций, вызываемых для изменения аргументов ключевых слов при генерации URL, в формате {scope: [functions]}. Ключ scope - это имя чертежа, для которого активны функции, или None - для всех запросов.

Чтобы зарегистрировать функцию, используйте декоратор url_defaults().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

url_defaults(f)

Функция обратного вызова для URL по умолчанию для всех функций представления приложения. Она вызывается с конечной точкой и значениями и должна обновить переданные значения.

Эта функция доступна как для объектов приложения, так и для объектов чертежа. При использовании в приложении эта функция вызывается для каждого запроса. При использовании на blueprint, это вызывается для запросов, которые обрабатывает blueprint. Чтобы зарегистрироваться в blueprint и влиять на каждый запрос, используйте Blueprint.app_url_defaults().

Параметры:

f (T_url_defaults) –

Тип результата:

T_url_defaults

url_value_preprocessor(f)

Зарегистрируйте функцию препроцессора значений URL для всех функций представления в приложении. Эти функции будут вызываться перед функциями before_request().

Функция может изменять значения, полученные из сопоставленного url, перед тем, как они будут переданы в представление. Например, это может быть использовано для того, чтобы вытащить значение кода общего языка и поместить его в g, а не передавать его каждому представлению.

Функции передается имя конечной точки и диктат значений. Возвращаемое значение игнорируется.

Эта функция доступна как для объектов приложения, так и для объектов чертежа. При использовании в приложении эта функция вызывается для каждого запроса. При использовании на blueprint, это вызывается для запросов, которые обрабатывает blueprint. Чтобы зарегистрироваться в blueprint и влиять на каждый запрос, используйте Blueprint.app_url_value_preprocessor().

Параметры:

f (T_url_value_preprocessor) –

Тип результата:

T_url_value_preprocessor

url_value_preprocessors: t.Dict[ft.AppOrBlueprintKey, t.List[ft.URLValuePreprocessorCallable]]

Структура данных функций, вызываемых для изменения аргументов ключевых слов, переданных функции представления, в формате {scope: [functions]}. Ключ scope - это имя чертежа, для которого активны функции, или None для всех запросов.

Чтобы зарегистрировать функцию, используйте декоратор url_value_preprocessor().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

view_functions: t.Dict[str, t.Callable]

Словарь, отображающий имена конечных точек на функции представления.

Чтобы зарегистрировать функцию представления, используйте декоратор route().

Эта структура данных является внутренней. Ее не следует изменять напрямую, и ее формат может измениться в любое время.

Данные входящего запроса

class flask.Request(environ, populate_request=True, shallow=False)

Объект запроса, используемый по умолчанию во Flask. Запоминает сопоставленные конечную точку и аргументы представления.

Это то, что заканчивается как request. Если вы хотите заменить используемый объект запроса, вы можете подклассифицировать этот объект и установить request_class на ваш подкласс.

Объект request является подклассом Request и предоставляет все атрибуты, которые определяет Werkzeug, плюс несколько специфических для Flask.

Параметры:
  • environ (WSGIEnvironment) –

  • populate_request (bool) –

  • shallow (bool) –

property accept_charsets: CharsetAccept

Список наборов символов, поддерживаемых данным клиентом, в виде объекта CharsetAccept.

property accept_encodings: Accept

Список кодировок, которые принимает данный клиент. Кодировки в термине HTTP - это кодировки сжатия, такие как gzip. Для получения информации о кодовых наборах посмотрите accept_charset.

property accept_languages: LanguageAccept

Список языков, которые этот клиент принимает как объект LanguageAccept.

property accept_mimetypes: MIMEAccept

Список миметипов, поддерживаемых данным клиентом, в виде объекта MIMEAccept.

access_control_request_headers

Отправляется с запросом preflight, чтобы указать, какие заголовки будут отправлены с запросом cross origin. Устанавливает access_control_allow_headers в ответе, чтобы указать, какие заголовки разрешены.

access_control_request_method

Отправляется с предполётным запросом, чтобы указать, какой метод будет использоваться для кросс-запроса. Установите access_control_allow_methods в ответе, чтобы указать, какие методы разрешены.

property access_route: List[str]

Если существует заголовок forwarded, то это список всех ip-адресов от ip клиента до последнего прокси-сервера.

classmethod application(f)

Декорируйте функцию как ответчик, принимающий запрос в качестве последнего аргумента. Это работает как декоратор responder(), но функции передается объект запроса в качестве последнего аргумента, и объект запроса будет закрыт автоматически:

@Request.application
def my_wsgi_app(request):
    return Response('Hello World!')

Начиная с версии Werkzeug 0.14 исключения HTTP автоматически перехватываются и преобразуются в ответы вместо отказа.

Параметры:

f (Callable[[Request], WSGIApplication]) – вызываемый модуль WSGI для украшения

Результат:

новый вызываемый модуль WSGI

Тип результата:

WSGIApplication

property args: MultiDict[str, str]

Разобранные параметры URL (часть URL после знака вопроса).

По умолчанию из этой функции возвращается ImmutableMultiDict. Это можно изменить, установив parameter_storage_class на другой тип. Это может быть необходимо, если порядок данных формы важен.

property authorization: Optional[Authorization]

Объект Authorization в разобранном виде.

property base_url: str

Как url, но без строки запроса.

property blueprint: Optional[str]

Зарегистрированное имя текущего чертежа.

Это будет None, если конечная точка не является частью чертежа, или если сопоставление URL не удалось или еще не было выполнено.

Это имя не обязательно совпадает с именем, под которым был создан чертеж. Он мог быть вложен или зарегистрирован под другим именем.

property blueprints: List[str]

Зарегистрированные имена текущего чертежа вверх по родительским чертежам.

Это будет пустой список, если нет текущего чертежа, или если сопоставление URL не удалось.

Changelog

Добавлено в версии 2.0.1.

property cache_control: RequestCacheControl

Объект RequestCacheControl для входящих заголовков управления кэшем.

charset = 'utf-8'

Кодировка, используемая для декодирования большинства данных в запросе.

close()

Закрывает связанные ресурсы данного объекта запроса. При этом все ручки файлов закрываются явно. Вы также можете использовать объект запроса в операторе with, который автоматически закроет его.

Changelog

Добавлено в версии 0.9.

Тип результата:

None

content_encoding

Поле заголовка сущности Content-Encoding используется в качестве модификатора к типу медиа. Когда оно присутствует, его значение указывает, какие дополнительные кодировки содержимого были применены к телу сущности, и, следовательно, какие механизмы декодирования должны быть применены, чтобы получить тип медиа, на который ссылается поле заголовка Content-Type.

Changelog

Добавлено в версии 0.9.

property content_length: Optional[int]

Поле заголовка сущности Content-Length указывает размер тела сущности в байтах или, в случае метода HEAD, размер тела сущности, которое было бы отправлено, если бы запрос был GET.

content_md5

Поле заголовка сущности Content-MD5, как определено в RFC 1864, представляет собой дайджест MD5 тела сущности для обеспечения сквозной проверки целостности сообщения (MIC) тела сущности. (Примечание: MIC хорошо подходит для обнаружения случайного изменения тела сущности при передаче, но не защищает от злонамеренных атак).

Changelog

Добавлено в версии 0.9.

content_type

Поле Content-Type entity-header указывает тип носителя тела сущности, отправляемого получателю, или, в случае метода HEAD, тип носителя, который был бы отправлен, если бы запрос был GET.

property cookies: ImmutableMultiDict[str, str]

dict с содержимым всех cookies, переданных вместе с запросом.

property data: bytes

Содержит данные входящего запроса в виде строки в случае, если он пришел с миметипом, который Werkzeug не обрабатывает.

date

Поле общего заголовка Date представляет дату и время, в которое было отправлено сообщение, имея ту же семантику, что и orig-date в RFC 822.

Changelog

Изменено в версии 2.0: Объект datetime учитывает временные зоны.

dict_storage_class

alias of ImmutableMultiDict

encoding_errors = 'replace'

процедура обработки ошибок, по умолчанию „replace“

property endpoint: Optional[str]

Конечная точка, соответствующая URL-адресу запроса.

Это будет None, если совпадение не удалось или еще не было выполнено.

Это в сочетании с view_args может быть использовано для восстановления того же URL или измененного URL.

environ: WSGIEnvironment

Среда WSGI, содержащая HTTP-заголовки и информацию от сервера WSGI.

property files: ImmutableMultiDict[str, FileStorage]

MultiDict объект, содержащий все загруженные файлы. Каждый ключ в files - это имя из <input type="file" name="">. Каждое значение в files - это объект Werkzeug FileStorage.

В основном он ведет себя как стандартный объект file, знакомый вам по Python, с той разницей, что у него также есть функция save(), которая может сохранить файл в файловой системе.

Обратите внимание, что files будет содержать данные, только если метод запроса был POST, PUT или PATCH и <form>, который отправил запрос, имел enctype="multipart/form-data". В противном случае он будет пуст.

Более подробную информацию об используемой структуре данных см. в документации MultiDict / FileStorage.

property form: ImmutableMultiDict[str, str]

Параметры формы. По умолчанию из этой функции возвращается ImmutableMultiDict. Это можно изменить, установив parameter_storage_class в другой тип. Это может быть необходимо, если порядок данных формы важен.

Пожалуйста, имейте в виду, что загрузка файлов будет происходить не здесь, а в атрибуте files.

Changelog

Изменено в версии 0.9: До версии Werkzeug 0.9 здесь содержались только данные формы для запросов POST и PUT.

form_data_parser_class

alias of FormDataParser

classmethod from_values(*args, **kwargs)

Создайте новый объект запроса на основе предоставленных значений. Если задано окружение, недостающие значения заполняются оттуда. Этот метод полезен для небольших скриптов, когда вам нужно имитировать запрос от URL. Не используйте этот метод для нетестирования, существует полнофункциональный объект клиента (Client), который позволяет создавать многокомпонентные запросы, поддерживает cookies и т.д.

Принимает те же параметры, что и EnvironBuilder.

Changelog

Изменено в версии 0.5: Этот метод теперь принимает те же аргументы, что и EnvironBuilder. Из-за этого параметр environ теперь называется environ_overrides.

Результат:

объект запроса

Параметры:
  • args (Any) –

  • kwargs (Any) –

Тип результата:

Request

property full_path: str

Запрашиваемый путь, включая строку запроса.

get_data(cache=True, as_text=False, parse_form_data=False)

Считывает буферизованные входящие данные от клиента в один байтовый объект. По умолчанию он кэшируется, но это поведение можно изменить, установив cache в False.

Обычно плохой идеей является вызов этого метода без предварительной проверки длины содержимого, так как клиент может отправить десятки мегабайт или больше, что вызовет проблемы с памятью на сервере.

Обратите внимание, что если данные формы уже были разобраны, этот метод ничего не вернет, так как разбор данных формы не кэширует данные, как это делает этот метод. Для неявного вызова функции разбора данных формы установите parse_form_data в True. После этого возвращаемое значение метода будет пустой строкой, если парсер формы обрабатывает данные. Обычно в этом нет необходимости, так как если все данные кэшируются (что делается по умолчанию), то парсер формы будет использовать кэшированные данные для разбора данных формы. Пожалуйста, не забывайте в любом случае проверять длину содержимого перед вызовом этого метода, чтобы не истощать память сервера.

Если as_text имеет значение True, возвращаемое значение будет представлять собой декодированную строку.

Changelog

Добавлено в версии 0.9.

Параметры:
  • cache (bool) –

  • as_text (bool) –

  • parse_form_data (bool) –

Тип результата:

Union[bytes, str]

get_json(force=False, silent=False, cache=True)

Разобрать data как JSON.

Если mimetype не указывает на JSON (application/json, см. is_json), или разбор не удался, вызывается on_json_loading_failed() и его возвращаемое значение используется в качестве возвращаемого значения. По умолчанию это вызывает ошибку 400 Bad Request.

Параметры:
  • force (bool) – Игнорируйте mimetype и всегда пытайтесь разобрать JSON.

  • silent (bool) – Заглушить ошибки миметипа и парсинга и вернуть вместо них None.

  • cache (bool) – Сохраните разобранный JSON, чтобы вернуть его для последующих вызовов.

Тип результата:

Optional[Any]

Changelog

Изменено в версии 2.1: Вызывает ошибку 400, если тип содержимого неверен.

headers

Заголовки, полученные вместе с запросом.

property host: str

Имя хоста, к которому был сделан запрос, включая порт, если он нестандартный. Проверяется с помощью trusted_hosts.

property host_url: str

Только схема URL запроса и хост.

property if_match: ETags

Объект, содержащий все этаги в заголовке If-Match.

Тип результата:

ETags

property if_modified_since: Optional[datetime]

Разобранный заголовок If-Modified-Since как объект времени.

Changelog

Изменено в версии 2.0: Объект datetime учитывает временные зоны.

property if_none_match: ETags

Объект, содержащий все etags в заголовке If-None-Match.

Тип результата:

ETags

property if_range: IfRange

Разобранный заголовок If-Range.

Changelog

Изменено в версии 2.0: IfRange.date учитывает временные зоны.

Добавлено в версии 0.7.

property if_unmodified_since: Optional[datetime]

Разобранный заголовок If-Unmodified-Since как объект времени.

Changelog

Изменено в версии 2.0: Объект datetime учитывает временные зоны.

input_stream

Входной поток WSGI.

В целом, это плохая идея использовать его, потому что вы можете легко прочитать за границу. Вместо этого используйте stream.

property is_json: bool

Проверьте, указывает ли mimetype на данные JSON, либо application/json, либо application/*+json.

is_multiprocess

булево значение True, если приложение обслуживается сервером WSGI, порождающим несколько процессов.

is_multithread

булево значение True, если приложение обслуживается многопоточным сервером WSGI.

is_run_once

булево значение True, если приложение будет выполняться только один раз за время жизни процесса. Это имеет место, например, для CGI, но не гарантируется, что выполнение произойдет только один раз.

property is_secure: bool

True если запрос был сделан по защищенному протоколу (HTTPS или WSS).

property json: Optional[Any]

Разобранные данные JSON, если mimetype указывает на JSON (application/json, см. is_json).

Вызывает get_json() с аргументами по умолчанию.

Если тип содержимого запроса не application/json, это приведет к ошибке 400 Bad Request.

Changelog

Изменено в версии 2.1: Вызывает ошибку 400, если тип содержимого неверен.

list_storage_class

alias of ImmutableList

make_form_data_parser()

Создает парсер данных формы. Инстанцирует form_data_parser_class с некоторыми параметрами.

Changelog

Добавлено в версии 0.8.

Тип результата:

FormDataParser

property max_content_length: Optional[int]

Просмотр ключа конфигурации MAX_CONTENT_LENGTH только для чтения.

max_form_memory_size: t.Optional[int] = None

максимальный размер поля формы. Это значение передается функции разбора данных формы (parse_form_data()). При установке и обращении к атрибуту form или files, когда длина данных в памяти для post data превышает указанное значение, возникает исключение RequestEntityTooLarge.

Более подробную информацию можно найти на сайте /request_data.

Changelog

Добавлено в версии 0.5.

max_form_parts = 1000

Максимальное количество многочастных частей для разбора, передаваемое в form_data_parser_class. При разборе данных формы с количеством частей, превышающим это значение, будет поднят вопрос RequestEntityTooLarge.

Добавлено в версии 2.2.3.

max_forwards

Поле заголовка запроса Max-Forwards предоставляет механизм с методами TRACE и OPTIONS для ограничения количества прокси-серверов или шлюзов, которые могут переслать запрос на следующий входящий сервер.

method

Метод, с помощью которого был сделан запрос, например GET.

property mimetype: str

Как content_type, но без параметров (например, без charset, type и т.д.) и всегда в нижнем регистре. Например, если тип содержимого text/HTML; charset=utf-8, то mimetype будет 'text/html'.

property mimetype_params: Dict[str, str]

Параметры mimetype в виде dict. Например, если тип содержимого text/html; charset=utf-8, то параметры будут {'charset': 'utf-8'}.

on_json_loading_failed(e)

Вызывается, если get_json() не сработал и не был заглушен.

Если этот метод возвращает значение, оно используется в качестве возвращаемого значения для get_json(). Реализация по умолчанию возвращает BadRequest.

Параметры:

e (Optional[ValueError]) – Если парсинг не удался, это исключение. Это будет None, если тип содержимого не был application/json.

Тип результата:

Any

origin

Хост, с которого был отправлен запрос. Установите access_control_allow_origin в ответе, чтобы указать, какие хосты разрешены.

parameter_storage_class

alias of ImmutableMultiDict

path

Часть пути в URL после root_path. Это путь, используемый для маршрутизации внутри приложения.

property pragma: HeaderSet

Поле Pragma general-header используется для включения специфических для реализации директив, которые могут применяться к любому получателю по цепочке запрос/ответ. Все директивы pragma определяют необязательное поведение с точки зрения протокола; однако некоторые системы МОГУТ потребовать, чтобы поведение соответствовало директивам.

query_string

Часть URL после символа «?». Это необработанное значение, для разобранных значений используйте args.

property range: Optional[Range]

Разобранный заголовок Range.

Changelog

Добавлено в версии 0.7.

Тип результата:

Range

referrer

Поле заголовка запроса Referer позволяет клиенту указать для пользы сервера адрес (URI) ресурса, с которого был получен Request-URI («referrer», хотя поле заголовка написано неправильно).

remote_addr

Адрес клиента, отправляющего запрос.

remote_user

Если сервер поддерживает аутентификацию пользователя, и сценарий защищен, этот атрибут содержит имя пользователя, под которым он прошел аутентификацию.

root_path

Префикс, под которым монтируется приложение, без косой черты. После него идет path.

property root_url: str

Схема URL-адреса запроса, хост и корневой путь. Это корень, из которого осуществляется доступ к приложению.

routing_exception: Optional[Exception] = None

Если совпадение URL не удалось, это исключение, которое будет вызвано / было вызвано в процессе обработки запроса. Обычно это исключение NotFound или что-то подобное.

scheme

Схема URL протокола, который использовал запрос, например https или wss.

property script_root: str

Псевдоним для self.root_path. environ["SCRIPT_ROOT"] без косой черты.

server

Адрес сервера. (host, port), (path, None) для unix сокетов, или None, если неизвестен.

shallow: bool

Устанавливается при создании объекта запроса. Если True, чтение из тела запроса вызовет RuntimeException. Полезно для предотвращения модификации потока из промежуточного ПО.

property stream: IO[bytes]

Если входящие данные формы не были закодированы известным mimetype, данные сохраняются в этом потоке в неизменном виде для последующего использования. В большинстве случаев лучше использовать data, что даст вам эти данные в виде строки. Поток возвращает данные только один раз.

В отличие от input_stream этот поток должным образом охраняется, чтобы вы не могли случайно прочитать больше длины входных данных. Werkzeug внутренне всегда будет ссылаться на этот поток для чтения данных, что позволяет обернуть этот объект потоком, который выполняет фильтрацию.

Changelog

Изменено в версии 0.9: Теперь этот поток всегда доступен, но может быть использован парсером формы позже. Ранее поток устанавливался только в том случае, если парсинг не выполнялся.

trusted_hosts: t.Optional[t.List[str]] = None

Допустимые имена хостов при обработке запросов. По умолчанию все хосты являются доверенными, что означает, что все, что клиент говорит о хосте, будет принято.

Поскольку заголовки Host и X-Forwarded-Host могут быть установлены в любое значение вредоносным клиентом, рекомендуется либо установить это свойство, либо реализовать аналогичную проверку в прокси-сервере (если приложение выполняется за ним).

Changelog

Добавлено в версии 0.9.

property url: str

Полный URL-адрес запроса с указанием схемы, хоста, корневого пути, пути и строки запроса.

property url_charset: str

Кодировка, которая принимается для URL-адресов. По умолчанию используется значение charset.

Changelog

Добавлено в версии 0.6.

property url_root: str

Псевдоним для root_url. URL со схемой, хостом и корневым путем. Например, https://example.com/app/.

url_rule: Optional[Rule] = None

Внутреннее правило URL, соответствующее запросу. Это может быть полезно для проверки того, какие методы разрешены для URL из обработчика до/после (request.url_rule.methods) и т.д. Хотя если метод запроса был недопустимым для правила URL, то вместо него допустимый список доступен в routing_exception.valid_methods (атрибут исключения Werkzeug MethodNotAllowed), поскольку запрос никогда не был внутренне связан.

Changelog

Добавлено в версии 0.6.

property user_agent: UserAgent

Агент пользователя. Используйте user_agent.string для получения значения заголовка. Установите user_agent_class в подкласс UserAgent для обеспечения разбора других свойств или других расширенных данных.

Changelog

Изменено в версии 2.0: Встроенный парсер устарел и будет удален в Werkzeug 2.1. Для разбора данных из строки должен быть установлен подкласс UserAgent.

user_agent_class

alias of UserAgent

property values: CombinedMultiDict[str, str]

werkzeug.datastructures.CombinedMultiDict, который объединяет args и form.

Для GET-запросов присутствуют только args, но не form.

Changelog

Изменено в версии 2.0: Для GET-запросов присутствуют только args, но не form.

view_args: Optional[Dict[str, Any]] = None

Диктат аргументов представления, которые соответствуют запросу. Если при подборе произошло исключение, это будет None.

property want_form_data_parsed: bool

True, если метод запроса передает содержимое. По умолчанию это истина, если отправлено Content-Type.

Changelog

Добавлено в версии 0.8.

flask.request

Для доступа к входящим данным запроса вы можете использовать глобальный объект request. Flask анализирует входящие данные запроса и предоставляет вам доступ к ним через этот глобальный объект. Внутри Flask следит за тем, чтобы вы всегда получали правильные данные для активного потока, если вы работаете в многопоточной среде.

Это прокси. См. раздел Примечания о доверенностях для получения дополнительной информации.

Объект запроса является экземпляром Request.

Объекты реагирования

class flask.Response(response=None, status=None, headers=None, mimetype=None, content_type=None, direct_passthrough=False)

Объект ответа, который по умолчанию используется во Flask. Работает как объект ответа из Werkzeug, но по умолчанию имеет HTML-миметип. Довольно часто вам не нужно создавать этот объект самостоятельно, поскольку make_response() позаботится об этом за вас.

Если вы хотите заменить используемый объект ответа, вы можете подклассифицировать этот объект и установить response_class на ваш подкласс.

Changelog

Изменено в версии 1.0: Поддержка JSON добавляется в ответ, как и в запрос. Это полезно при тестировании для получения данных ответа тестового клиента в формате JSON.

Изменено в версии 1.0: Добавлено max_cookie_size.

Параметры:
accept_ranges

Заголовок Accept-Ranges. Даже если имя указывает на то, что поддерживается несколько значений, это должен быть только один строковый маркер.

Значения 'bytes' и 'none' являются общими.

Changelog

Добавлено в версии 0.7.

property access_control_allow_credentials: bool

Могут ли учетные данные передаваться браузером коду JavaScript. Как часть запроса preflight он указывает, могут ли учетные данные использоваться в кросс-запросе происхождения.

access_control_allow_headers

Какие заголовки могут быть отправлены с запросом перекрестного происхождения.

access_control_allow_methods

Какие методы могут быть использованы для запроса перекрестного происхождения.

access_control_allow_origin

Происхождение или „*“ для любого происхождения, которое может делать перекрестные запросы происхождения.

access_control_expose_headers

Какие заголовки могут быть переданы браузером коду JavaScript.

access_control_max_age

Максимальный срок в секундах, на который могут кэшироваться параметры контроля доступа.

add_etag(overwrite=False, weak=False)

Добавьте etag для текущего ответа, если его еще нет.

Changelog

Изменено в версии 2.0: Для генерации значения используется SHA-1. MD5 может быть недоступен в некоторых средах.

Параметры:
Тип результата:

None

age

Поле заголовка ответа Age передает оценку отправителем количества времени, прошедшего с момента создания ответа (или его проверки) на сервере происхождения.

Значения возраста - неотрицательные десятичные целые числа, представляющие время в секундах.

property allow: HeaderSet

Поле Allow entity-header перечисляет набор методов, поддерживаемых ресурсом, идентифицированным Request-URI. Цель этого поля - строго информировать получателя о допустимых методах, связанных с ресурсом. Поле заголовка Allow ДОЛЖНО присутствовать в ответе 405 (Method Not Allowed).

autocorrect_location_header = False

Если заголовок перенаправления Location представляет собой относительный URL, сделайте его абсолютным URL, включая схему и домен.

Changelog

Изменено в версии 2.1: По умолчанию эта функция отключена, поэтому ответы будут отправлять относительные перенаправления.

Добавлено в версии 0.8.

automatically_set_content_length = True

Должен ли этот объект ответа автоматически устанавливать заголовок content-length, если это возможно? По умолчанию это верно.

Changelog

Добавлено в версии 0.8.

property cache_control: ResponseCacheControl

Поле общего заголовка Cache-Control используется для указания директив, которые ДОЛЖНЫ соблюдаться всеми механизмами кэширования в цепочке запрос/ответ.

calculate_content_length()

Возвращает длину содержимого, если она доступна, или None в противном случае.

Тип результата:

Optional[int]

call_on_close(func)

Добавляет функцию во внутренний список функций, которые должны быть вызваны в процессе закрытия ответа. Начиная с версии 0.7 эта функция также возвращает переданную функцию, так что ее можно использовать в качестве декоратора.

Changelog

Добавлено в версии 0.6.

Параметры:

func (Callable[[], Any]) –

Тип результата:

Callable[[], Any]

charset = 'utf-8'

charset ответа.

close()

По возможности закройте обернутый ответ. Вы также можете использовать объект в операторе with, который автоматически закроет его.

Changelog

Добавлено в версии 0.9: Теперь его можно использовать в операторе with.

Тип результата:

None

content_encoding

Поле заголовка сущности Content-Encoding используется в качестве модификатора к типу медиа. Когда оно присутствует, его значение указывает, какие дополнительные кодировки содержимого были применены к телу сущности, и, следовательно, какие механизмы декодирования должны быть применены, чтобы получить тип медиа, на который ссылается поле заголовка Content-Type.

property content_language: HeaderSet

Поле заголовка сущности Content-Language описывает естественный язык (языки) предполагаемой аудитории для вложенной сущности. Обратите внимание, что это может быть не эквивалентно всем языкам, используемым в теле сущности.

content_length

Поле Content-Length entity-header указывает размер тела сущности в десятичном количестве OCTET, отправленного получателю, или, в случае метода HEAD, размер тела сущности, которое было бы отправлено, если бы запрос был GET.

content_location

Поле заголовка сущности Content-Location МОЖЕТ использоваться для указания местоположения ресурса для сущности, вложенной в сообщение, если эта сущность доступна из места, отличного от URI запрашиваемого ресурса.

content_md5

Поле заголовка сущности Content-MD5, как определено в RFC 1864, представляет собой дайджест MD5 тела сущности для обеспечения сквозной проверки целостности сообщения (MIC) тела сущности. (Примечание: MIC хорошо подходит для обнаружения случайного изменения тела сущности при передаче, но не защищает от злонамеренных атак).

property content_range: ContentRange

Заголовок Content-Range в виде объекта ContentRange. Доступен, даже если заголовок не установлен.

Changelog

Добавлено в версии 0.7.

property content_security_policy: ContentSecurityPolicy

Заголовок Content-Security-Policy в виде объекта ContentSecurityPolicy. Доступен, даже если заголовок не установлен.

Заголовок Content-Security-Policy добавляет дополнительный уровень безопасности, чтобы помочь обнаружить и смягчить определенные типы атак.

property content_security_policy_report_only: ContentSecurityPolicy

Заголовок Content-Security-policy-report-only в виде объекта ContentSecurityPolicy. Доступен, даже если заголовок не установлен.

Заголовок Content-Security-Policy-Report-Only добавляет политику csp, которая не применяется, но о ней сообщается, что помогает обнаружить определенные типы атак.

content_type

Поле Content-Type entity-header указывает тип носителя тела сущности, отправляемого получателю, или, в случае метода HEAD, тип носителя, который был бы отправлен, если бы запрос был GET.

cross_origin_embedder_policy

Предотвращает загрузку документом любых кросс-оригинальных ресурсов, которые не предоставляют документу явного разрешения. Значения должны быть членами перечисления werkzeug.http.COEP.

cross_origin_opener_policy

Позволяет контролировать совместное использование контекстной группы просмотра с документами перекрестного происхождения. Значения должны быть членами перечисления werkzeug.http.COOP.

property data: Union[bytes, str]

Дескриптор, который вызывает get_data() и set_data().

date

Поле общего заголовка Date представляет дату и время, в которое было отправлено сообщение, имея ту же семантику, что и orig-date в RFC 822.

Changelog

Изменено в версии 2.0: Объект datetime учитывает временные зоны.

default_mimetype: t.Optional[str] = 'text/html'

mimetype по умолчанию, если не указан ни один.

default_status = 200

статус по умолчанию, если он не указан.

Удалить куки. Не работает, если ключ не существует.

Параметры:
  • key (str) – ключ (имя) удаляемого файла cookie.

  • path (str) – если cookie, который должен быть удален, был ограничен путем, путь должен быть определен здесь.

  • domain (Optional[str]) – если файл cookie, который должен быть удален, был ограничен доменом, этот домен должен быть определен здесь.

  • secure (bool) – Если True, cookie будет доступен только через HTTPS.

  • httponly (bool) – Запретить JavaScript доступ к cookie.

  • samesite (Optional[str]) – Ограничьте область применения cookie, чтобы он прикреплялся только к запросам «одного сайта».

Тип результата:

None

direct_passthrough

Передавать тело ответа непосредственно в виде итератора WSGI. Это можно использовать, когда тело является двоичным файлом или другим итератором байтов, чтобы пропустить некоторые ненужные проверки. Используйте send_file() вместо того, чтобы задавать это вручную.

expires

Поле сущностного заголовка Expires указывает дату/время, по истечении которого ответ считается несвежим. Несвежая запись кэша обычно не может быть возвращена кэшем.

Changelog

Изменено в версии 2.0: Объект datetime учитывает временные зоны.

classmethod force_type(response, environ=None)

Убедитесь, что ответ WSGI является объектом ответа текущего типа. Werkzeug будет использовать Response внутренне во многих ситуациях, таких как исключения. Если вы вызовете get_response() на исключении, вы получите обратно обычный объект Response, даже если вы используете пользовательский подкласс.

Этот метод может принудительно задавать тип ответа, а также преобразовывать произвольные вызываемые объекты WSGI в объекты ответа, если предоставлена среда:

# convert a Werkzeug response object into an instance of the
# MyResponseClass subclass.
response = MyResponseClass.force_type(response)

# convert any WSGI application into a response object
response = MyResponseClass.force_type(response, environ)

Это особенно полезно, если вы хотите постобрабатывать ответы в главном диспетчере и использовать функциональность, предоставляемую вашим подклассом.

Имейте в виду, что это изменит объекты реагирования на месте, если это возможно!

Параметры:
  • response (Response) – объект ответа или wsgi приложение.

  • environ (Optional[WSGIEnvironment]) – объект среды WSGI.

Результат:

объект ответа.

Тип результата:

Response

freeze()

Подготовьте объект ответа к маринованию. Делается следующее:

  • Буферизация ответа в список, игнорируя implicity_sequence_conversion и direct_passthrough.

  • Установите заголовок Content-Length.

  • Создайте заголовок ETag, если он еще не установлен.

Changelog

Изменено в версии 2.1: Удален параметр no_etag.

Изменено в версии 2.0: Добавлен заголовок ETag, параметр no_etag устарел и будет удален в Werkzeug 2.1.

Изменено в версии 0.6: Заголовок Content-Length установлен.

Тип результата:

None

classmethod from_app(app, environ, buffered=False)

Создайте новый объект ответа из вывода приложения. Это работает лучше всего, если вы передаете ему приложение, которое постоянно возвращает генератор. Иногда приложения могут использовать write(), возвращаемый функцией start_response. Эта функция пытается автоматически разрешить такие крайние случаи. Но если вы не получаете ожидаемого результата, вам следует установить buffered в True, что обеспечит буферизацию.

Параметры:
  • app (WSGIApplication) – приложение WSGI для выполнения.

  • environ (WSGIEnvironment) – среда WSGI для выполнения.

  • buffered (bool) – установлено в True для обеспечения буферизации.

Результат:

объект ответа.

Тип результата:

Response

get_app_iter(environ)

Возвращает итератор приложения для заданной среды. В зависимости от метода запроса и текущего кода состояния возвращаемым значением может быть пустой ответ, а не ответ из ответа.

Если метод запроса - HEAD или код состояния находится в диапазоне, где спецификация HTTP требует пустого ответа, возвращается пустая итерируемая таблица.

Changelog

Добавлено в версии 0.6.

Параметры:

environ (WSGIEnvironment) – среда WSGI для запроса.

Результат:

итерабельность ответа.

Тип результата:

Iterable[bytes]

get_data(as_text=False)

Строковое представление тела ответа. При каждом вызове этого свойства итерабельность ответа кодируется и сглаживается. Это может привести к нежелательному поведению при потоковой передаче больших данных.

Это поведение можно отключить, установив implicit_sequence_conversion в False.

Если as_text имеет значение True, возвращаемое значение будет представлять собой декодированную строку.

Changelog

Добавлено в версии 0.9.

Параметры:

as_text (bool) –

Тип результата:

Union[bytes, str]

get_etag()

Возвращает кортеж в форме (etag, is_weak). Если ETag отсутствует, возвращаемое значение будет (None, None).

Тип результата:

Union[Tuple[str, bool], Tuple[None, None]]

get_json(force=False, silent=False)

Разобрать data как JSON. Полезно при тестировании.

Если mimetype не указывает на JSON (application/json, см. is_json), возвращается None.

В отличие от Request.get_json(), результат не кэшируется.

Параметры:
  • force (bool) – Игнорируйте mimetype и всегда пытайтесь разобрать JSON.

  • silent (bool) – Замалчивать ошибки синтаксического анализа и возвращать вместо них None.

Тип результата:

Optional[Any]

get_wsgi_headers(environ)

Автоматически вызывается непосредственно перед запуском ответа и возвращает заголовки, измененные для данного окружения. Он возвращает копию заголовков из ответа с некоторыми изменениями, если это необходимо.

Например, заголовок location (если он присутствует) присоединяется к корневому URL среды. Также здесь длина содержимого автоматически устанавливается равной нулю для определенных кодов состояния.

Changelog

Изменено в версии 0.6: Ранее эта функция называлась fix_headers и изменяла объект ответа на месте. Также, начиная с версии 0.6, IRI в заголовках location и content-location обрабатываются правильно.

Также, начиная с версии 0.6, Werkzeug будет пытаться установить длину содержимого, если сможет определить ее самостоятельно. Это происходит, если все строки в итеративной таблице ответа уже закодированы и итеративная таблица буферизована.

Параметры:

environ (WSGIEnvironment) – среда WSGI для запроса.

Результат:

возвращает новый объект Headers.

Тип результата:

Headers

get_wsgi_response(environ)

Возвращает окончательный ответ WSGI в виде кортежа. Первый элемент в кортеже - итератор приложения, второй - статус, третий - список заголовков. Возвращаемый ответ создается специально для данной среды. Например, если метод запроса в среде WSGI - 'HEAD', то ответ будет пустым, в нем будут присутствовать только заголовки и код состояния.

Changelog

Добавлено в версии 0.6.

Параметры:

environ (WSGIEnvironment) – среда WSGI для запроса.

Результат:

кортеж (app_iter, status, headers).

Тип результата:

Tuple[Iterable[bytes], str, List[Tuple[str, str]]]

implicit_sequence_conversion = True

если установлено значение False, доступ к свойствам объекта ответа не будет пытаться использовать итератор ответа и преобразовывать его в список.

Changelog

Добавлено в версии 0.6.2: Ранее этот атрибут назывался implicit_seqence_conversion. (Обратите внимание на опечатку). Если вы использовали эту функцию, вам придется адаптировать свой код к изменению названия.

property is_json: bool

Проверьте, указывает ли mimetype на данные JSON, либо application/json, либо application/*+json.

property is_sequence: bool

Если итератор буферизован, это свойство будет True. Объект ответа будет считать итератор буферизованным, если атрибутом ответа является список или кортеж.

Changelog

Добавлено в версии 0.6.

property is_streamed: bool

Если ответ является потоковым (ответ не является итерабельным с информацией о длине), это свойство равно True. В данном случае streamed означает, что нет информации о количестве итераций. Это свойство обычно True, если объекту ответа передан генератор.

Это полезно для проверки перед применением какой-либо фильтрации сообщений, которая не должна выполняться для потоковых ответов.

iter_encoded()

Итератор ответа, закодированного с помощью кодировки ответа. Если объект ответа вызывается как приложение WSGI, возвращаемое значение этого метода используется как итератор приложения, если только не было активировано direct_passthrough.

Тип результата:

Iterator[bytes]

property json: Optional[Any]

Разобранные данные JSON, если mimetype указывает на JSON (application/json, см. is_json).

Вызывает get_json() с аргументами по умолчанию.

last_modified

Поле заголовка сущности Last-Modified указывает дату и время, когда, по мнению сервера происхождения, вариант был изменен в последний раз.

Changelog

Изменено в версии 2.0: Объект datetime учитывает временные зоны.

location

Поле заголовка ответа Location используется для перенаправления получателя на место, отличное от Request-URI, для завершения запроса или идентификации нового ресурса.

make_conditional(request_or_environ, accept_ranges=False, complete_length=None)

Сделать ответ условным по отношению к запросу. Этот метод лучше всего работает, если для ответа уже определен etag. Для этого можно использовать метод add_etag. При вызове без etag устанавливается только заголовок даты.

Это ничего не делает, если метод запроса в запросе или окружении не GET или HEAD.

Для оптимальной производительности при обработке запросов диапазона рекомендуется, чтобы ваш объект данных ответа реализовывал методы seekable, seek и tell, описанные в io.IOBase. Объекты, возвращаемые командой wrap_file(), автоматически реализуют эти методы.

Она не удаляет тело ответа, потому что это то, что функция __call__() делает за нас автоматически.

Возвращает self, так что вы можете делать return resp.make_conditional(req), но модифицирует объект на месте.

Параметры:
  • request_or_environ (Union[WSGIEnvironment, Request]) – объект запроса или среда WSGI, которая будет использоваться для обуславливания ответа.

  • accept_ranges (Union[bool, str]) – Этот параметр определяет значение заголовка Accept-Ranges. Если False (по умолчанию), заголовок не устанавливается. Если True, то будет установлено значение "bytes". Если None, то будет установлено значение "none". Если это строка, то будет использовано это значение.

  • complete_length (Optional[int]) – Используется только в действительных запросах Range. Он будет устанавливать значение полной длины Content-Range и вычислять реальное значение Content-Length. Этот параметр является обязательным для успешного завершения запросов Range.

поднимает:

RequestedRangeNotSatisfiable если заголовок Range не может быть разобран или удовлетворен.

Тип результата:

Response

Changelog

Изменено в версии 2.0: Обработка диапазона пропускается, если длина равна 0, вместо того, чтобы выдать ошибку 416 Range Not Satisfiable.

make_sequence()

Преобразует итератор ответа в список. По умолчанию это происходит автоматически, если требуется. Если implicit_sequence_conversion отключен, этот метод не будет вызываться автоматически, и некоторые свойства могут вызвать исключения. При этом также кодируются все элементы.

Changelog

Добавлено в версии 0.6.

Тип результата:

None

Просмотр ключа конфигурации MAX_COOKIE_SIZE только для чтения.

См. max_cookie_size в документации Werkzeug.

property mimetype: Optional[str]

mimetype (тип содержимого без charset и т.д.)

property mimetype_params: Dict[str, str]

Параметры mimetype в виде dict. Например, если тип содержимого text/html; charset=utf-8, то параметры будут {'charset': 'utf-8'}.

Changelog

Добавлено в версии 0.5.

response: t.Union[t.Iterable[str], t.Iterable[bytes]]

Тело ответа для отправки в виде итерабельного файла WSGI. Список строк или байт представляет собой ответ фиксированной длины, любая другая итерабельность - потоковый ответ. Строки кодируются в байты как UTF-8.

Не устанавливайте значение в виде простой строки или байтов, это приведет к тому, что отправка ответа будет очень неэффективной, так как он будет перебирать по одному байту за раз.

property retry_after: Optional[datetime]

Поле заголовка ответа Retry-After можно использовать в ответе 503 (Service Unavailable), чтобы указать, как долго сервис будет недоступен для запрашивающего клиента.

Время в секундах до истечения срока действия или даты.

Changelog

Изменено в версии 2.0: Объект datetime учитывает временные зоны.

Устанавливает файл cookie.

Выдается предупреждение, если размер заголовка cookie превышает max_cookie_size, но заголовок все равно будет установлен.

Параметры:
  • key (str) – ключ (имя) устанавливаемого файла cookie.

  • value (str) – значение файла cookie.

  • max_age (Optional[Union[timedelta, int]]) – должно быть числом секунд, или None (по умолчанию), если cookie должен действовать только до тех пор, пока длится сессия браузера клиента.

  • expires (Optional[Union[str, datetime, int, float]]) – должен быть объектом datetime или временной меткой UNIX.

  • path (Optional[str]) – ограничивает cookie заданным путем, по умолчанию он будет охватывать весь домен.

  • domain (Optional[str]) – если вы хотите установить междоменный файл cookie. Например, domain=".example.com" установит cookie, который будет доступен для чтения доменам www.example.com, foo.example.com и т.д. В противном случае cookie будет доступен для чтения только в том домене, который его установил.

  • secure (bool) – Если True, cookie будет доступен только через HTTPS.

  • httponly (bool) – Запретить JavaScript доступ к cookie.

  • samesite (Optional[str]) – Ограничьте область применения cookie, чтобы он прикреплялся только к запросам «одного сайта».

Тип результата:

None

set_data(value)

Устанавливает новую строку в качестве ответа. Значение должно быть строкой или байтом. Если задана строка, она кодируется в соответствии с кодовой сеткой ответа (по умолчанию utf-8).

Changelog

Добавлено в версии 0.9.

Параметры:

value (Union[bytes, str]) –

Тип результата:

None

set_etag(etag, weak=False)

Установите etag и отмените старый, если он был.

Параметры:
Тип результата:

None

property status: str

Код состояния HTTP в виде строки.

property status_code: int

Код состояния HTTP в виде числа.

property stream: ResponseStream

Итерабельность ответа в виде потока, доступного только для записи.

property vary: HeaderSet

Значение поля Vary указывает на набор полей заголовка запроса, который полностью определяет, пока ответ свежий, разрешено ли кэшу использовать этот ответ для ответа на последующий запрос без повторной проверки.

property www_authenticate: WWWAuthenticate

Заголовок WWW-Authenticate в разобранном виде.

Сессии

Если вы установили Flask.secret_key (или настроили его из SECRET_KEY), вы можете использовать сессии в приложениях Flask. Сессия позволяет запоминать информацию от одного запроса к другому. Для этого Flask использует подписанный файл cookie. Пользователь может просматривать содержимое сессии, но не может изменять его, пока не узнает секретный ключ, поэтому убедитесь, что он задан сложным и неугадываемым.

Для доступа к текущей сессии можно использовать объект session:

class flask.session

Объект session работает практически так же, как обычный dict, с той лишь разницей, что он отслеживает модификации.

Это прокси. См. раздел Примечания о доверенностях для получения дополнительной информации.

Интересны следующие атрибуты:

new

True если сессия новая, False в противном случае.

modified

True, если объект сессии обнаружил модификацию. Имейте в виду, что модификации на изменяемых структурах не подхватываются автоматически, в этой ситуации вы должны сами явно установить атрибут в True. Вот пример:

# this change is not picked up because a mutable object (here
# a list) is changed.
session['objects'].append(42)
# so mark it as modified yourself
session.modified = True
permanent

Если установлено значение True, то сессия живет permanent_session_lifetime секунд. По умолчанию - 31 день. Если установлено значение False (что является значением по умолчанию), сессия будет удалена, когда пользователь закроет браузер.

Интерфейс сеанса

Changelog

Добавлено в версии 0.8.

Интерфейс сессии предоставляет простой способ заменить реализацию сессии, которую использует Flask.

class flask.sessions.SessionInterface

Основной интерфейс, который вы должны реализовать, чтобы заменить стандартный интерфейс сессии, который использует реализацию securecookie от werkzeug. Единственные методы, которые вы должны реализовать, это open_session() и save_session(), остальные имеют полезные значения по умолчанию, которые вам не нужно изменять.

Объект сессии, возвращаемый методом open_session(), должен предоставлять интерфейс, подобный словарю, плюс свойства и методы из SessionMixin. Мы рекомендуем просто подклассифицировать dict и добавить этот миксин:

class Session(dict, SessionMixin):
    pass

Если open_session() возвращает None, Flask обращается к make_null_session() для создания сессии, которая действует как замена, если поддержка сессии не может работать из-за невыполнения какого-либо требования. Создаваемый по умолчанию класс NullSession будет жаловаться, что секретный ключ не был установлен.

Чтобы заменить интерфейс сеанса в приложении, достаточно назначить flask.Flask.session_interface:

app = Flask(__name__)
app.session_interface = MySessionInterface()

Несколько запросов с одной и той же сессией могут быть отправлены и обработаны одновременно. При реализации нового интерфейса сессии подумайте, должны ли быть синхронизированы чтения или записи в резервное хранилище. Нет никакой гарантии относительно порядка открытия или сохранения сессии для каждого запроса, это будет происходить в порядке начала и окончания обработки запросов.

Changelog

Добавлено в версии 0.8.

Возвращает домен, который должен быть установлен для сессионного cookie.

Использует SESSION_COOKIE_DOMAIN, если он настроен, иначе возвращается к определению домена на основе SERVER_NAME.

После обнаружения (или если он вообще не установлен), SESSION_COOKIE_DOMAIN обновляется, чтобы избежать повторного выполнения логики.

Параметры:

app (Flask) –

Тип результата:

Optional[str]

Возвращает True, если сессионная cookie должна быть httponly. В настоящее время возвращается только значение переменной конфигурации SESSION_COOKIE_HTTPONLY.

Параметры:

app (Flask) –

Тип результата:

bool

Имя сессионного файла cookie. Используется``app.config[«SESSION_COOKIE_NAME»]``.

Параметры:

app (Flask) –

Тип результата:

str

Возвращает путь, для которого cookie должен быть действительным. Реализация по умолчанию использует значение из конфигурационной переменной SESSION_COOKIE_PATH, если оно установлено, и возвращается к APPLICATION_ROOT или использует /, если оно None.

Параметры:

app (Flask) –

Тип результата:

str

Возвращает 'Strict' или 'Lax', если cookie должен использовать атрибут SameSite. В настоящее время возвращается только значение параметра SESSION_COOKIE_SAMESITE.

Параметры:

app (Flask) –

Тип результата:

str

Возвращает True, если cookie должен быть безопасным. В настоящее время возвращается значение параметра SESSION_COOKIE_SECURE.

Параметры:

app (Flask) –

Тип результата:

bool

get_expiration_time(app, session)

Вспомогательный метод, который возвращает дату истечения срока действия сессии или None, если сессия связана с сессией браузера. Реализация по умолчанию возвращает сейчас + постоянное время жизни сессии, настроенное в приложении.

Параметры:
Тип результата:

Optional[datetime]

is_null_session(obj)

Проверяет, является ли данный объект нулевой сессией. Нулевые сессии не запрашиваются для сохранения.

По умолчанию проверяется, является ли объект экземпляром null_session_class.

Параметры:

obj (object) –

Тип результата:

bool

make_null_session(app)

Создает нулевой сеанс, который действует как объект замены, если поддержка реального сеанса не может быть загружена из-за ошибки конфигурации. Это в основном облегчает работу пользователя, поскольку задача нулевой сессии - по-прежнему поддерживать поиск без жалоб, а на модификации отвечать полезным сообщением об ошибке.

По умолчанию создается экземпляр null_session_class.

Параметры:

app (Flask) –

Тип результата:

NullSession

null_session_class

make_null_session() будет искать здесь класс, который должен быть создан при запросе нулевой сессии. Аналогично метод is_null_session() будет выполнять проверку типа по этому типу.

alias of NullSession

open_session(app, request)

Эта функция вызывается в начале каждого запроса, после создания контекста запроса, перед сопоставлением URL.

Это должно вернуть объект, который реализует интерфейс, подобный словарю, а также интерфейс SessionMixin.

Это вернет None, чтобы указать, что загрузка не удалась каким-то образом, что не является немедленной ошибкой. В этом случае контекст запроса вернется к использованию make_null_session().

Параметры:
Тип результата:

Optional[SessionMixin]

pickle_based = False

Флаг, указывающий, основан ли интерфейс сессии на pickle. Он может использоваться расширениями Flask для принятия решения о том, как работать с объектом сессии.

Changelog

Добавлено в версии 0.10.

save_session(app, session, response)

Вызывается в конце каждого запроса, после генерации ответа, перед удалением контекста запроса. Он пропускается, если is_null_session() возвращает True.

Параметры:
Тип результата:

None

Используется сессионными бэкендами для определения того, следует ли установить заголовок Set-Cookie для куки этой сессии для данного ответа. Если сессия была изменена, cookie устанавливается. Если сессия постоянна и конфигурация SESSION_REFRESH_EACH_REQUEST равна true, cookie устанавливается всегда.

Эта проверка обычно пропускается, если сессия была удалена.

Changelog

Добавлено в версии 0.11.

Параметры:
Тип результата:

bool

class flask.sessions.SecureCookieSessionInterface

Интерфейс сессий по умолчанию, который хранит сессии в подписанных cookies через модуль itsdangerous.

static digest_method(string=b'', *, usedforsecurity=True)

хэш-функция, которую следует использовать для подписи. По умолчанию используется sha1

key_derivation = 'hmac'

имя поддерживаемого itsdangerous производного ключа. По умолчанию используется hmac.

open_session(app, request)

Эта функция вызывается в начале каждого запроса, после создания контекста запроса, перед сопоставлением URL.

Это должно вернуть объект, который реализует интерфейс, подобный словарю, а также интерфейс SessionMixin.

Это вернет None, чтобы указать, что загрузка не удалась каким-то образом, что не является немедленной ошибкой. В этом случае контекст запроса вернется к использованию make_null_session().

Параметры:
Тип результата:

Optional[SecureCookieSession]

salt = 'cookie-session'

соль, которая должна быть применена поверх секретного ключа для подписи сессий на основе cookie.

save_session(app, session, response)

Вызывается в конце каждого запроса, после генерации ответа, перед удалением контекста запроса. Он пропускается, если is_null_session() возвращает True.

Параметры:
Тип результата:

None

serializer = <flask.json.tag.TaggedJSONSerializer object>

Сериализатор Python для полезной нагрузки. По умолчанию используется компактный сериализатор, производный от JSON, с поддержкой некоторых дополнительных типов Python, таких как объекты datetime или кортежи.

session_class

alias of SecureCookieSession

class flask.sessions.SecureCookieSession(initial=None)

Базовый класс для сессий, основанных на подписанных cookies.

Этот бэкенд сессии будет устанавливать атрибуты modified и accessed. Он не может надежно отследить, является ли сессия новой (по сравнению с пустой), поэтому new остается жестко закодированным на False.

Параметры:

initial (Any) –

accessed = False

заголовок, который позволяет кэширующим прокси-серверам кэшировать разные страницы для разных пользователей.

get(key, default=None)

Возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию.

Параметры:
Тип результата:

Any

modified = False

Когда данные изменяются, это значение устанавливается в True. Отслеживается только сам словарь сессии; если сессия содержит изменяемые данные (например, вложенный dict), то это значение должно быть установлено в True вручную при изменении этих данных. Куки сессии будут записаны в ответ, только если это значение True.

setdefault(key, default=None)

Вставка ключа со значением по умолчанию, если ключ отсутствует в словаре.

Возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию.

Параметры:
Тип результата:

Any

class flask.sessions.NullSession(initial=None)

Класс используется для генерации более красивых сообщений об ошибках, если сессии недоступны. Он все еще разрешает доступ только для чтения к пустой сессии, но при установке выдает ошибку.

Параметры:

initial (Any) –

clear() None.  Remove all items from D.
Параметры:
  • args (Any) –

  • kwargs (Any) –

Тип результата:

te.NoReturn

pop(k[, d]) v, remove specified key and return the corresponding value.

Если ключ не найден, возвращает значение по умолчанию, если оно задано; в противном случае выдает ошибку KeyError.

Параметры:
  • args (Any) –

  • kwargs (Any) –

Тип результата:

te.NoReturn

popitem(*args, **kwargs)

Удалить и вернуть пару (ключ, значение) в виде кортежа.

Пары возвращаются в порядке LIFO (последним пришел, первым ушел). Вызывает KeyError, если диктант пуст.

Параметры:
  • args (Any) –

  • kwargs (Any) –

Тип результата:

te.NoReturn

setdefault(*args, **kwargs)

Вставка ключа со значением по умолчанию, если ключ отсутствует в словаре.

Возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию.

Параметры:
  • args (Any) –

  • kwargs (Any) –

Тип результата:

te.NoReturn

update([E, ]**F) None.  Update D from dict/iterable E and F.

Если E присутствует и имеет метод .keys(), то делает: for k in E: D[k] = E[k] Если E присутствует и не имеет метода .keys(), то делается: for k, v in E: D[k] = v В любом случае за этим следует: for k in F: D[k] = F[k]

Параметры:
  • args (Any) –

  • kwargs (Any) –

Тип результата:

te.NoReturn

class flask.sessions.SessionMixin

Расширяет базовый словарь с атрибутами сессии.

accessed = True

Некоторые реализации могут определять, когда данные сессии считываются или записываются, и устанавливать это значение, когда это происходит. В миксине по умолчанию жестко задано значение True.

modified = True

Некоторые реализации могут обнаруживать изменения в сессии и устанавливать это значение, когда это происходит. В миксине по умолчанию жестко задано значение True.

property permanent: bool

Это отражает клавишу '_permanent' в дикте.

Уведомление

Конфигурация PERMANENT_SESSION_LIFETIME может быть целым числом или timedelta. Атрибут permanent_session_lifetime всегда является timedelta.

Тестовый клиент

class flask.testing.FlaskClient(*args, **kwargs)

Работает как обычный тестовый клиент Werkzeug, но имеет знания о контекстах Flask, чтобы отложить очистку контекста запроса до конца блока with. Для получения общей информации о том, как использовать этот класс, обратитесь к werkzeug.test.Client.

Changelog

Изменено в версии 0.12: app.test_client() включает предустановленное окружение по умолчанию, которое может быть установлено после инстанцирования объекта app.test_client() в client.environ_base.

Основное использование описано в главе Тестирование приложений Flask.

Параметры:
  • args (Any) –

  • kwargs (Any) –

open(*args, buffered=False, follow_redirects=False, **kwargs)

Генерирует дикту окружения из заданных аргументов, выполняет запрос к приложению, используя его, и возвращает ответ.

Параметры:
  • args (Any) – Передается в EnvironBuilder для создания окружения для запроса. Если передается один аргумент, он может быть существующим EnvironBuilder или диктом окружения.

  • buffered (bool) – Преобразовать итератор, возвращенный приложением, в список. Если у итератора есть метод close(), он вызывается автоматически.

  • follow_redirects (bool) – Выполняйте дополнительные запросы, следуя HTTP-перенаправлениям, пока не будет возвращен статус non-redirect. TestResponse.history перечисляет промежуточные ответы.

  • kwargs (Any) –

Тип результата:

TestResponse

Changelog

Изменено в версии 2.1: Удален параметр as_tuple.

Изменено в версии 2.0: as_tuple является устаревшим и будет удален в Werkzeug 2.1. Вместо этого используйте TestResponse.request и request.environ.

Изменено в версии 2.0: Входной поток запроса закрывается при вызове response.close(). Входные потоки для перенаправления закрываются автоматически.

Изменено в версии 0.5: Если в качестве файла в дикте для параметра data указан dict, то тип содержимого должен называться content_type вместо mimetype. Это изменение было сделано для согласованности с werkzeug.FileWrapper.

Изменено в версии 0.5: Добавлен параметр follow_redirects.

session_transaction(*args, **kwargs)

При использовании в сочетании с оператором with это открывает транзакцию сессии. Это может быть использовано для изменения сессии, которую использует тестовый клиент. После выхода из блока with сессия сохраняется обратно.

with client.session_transaction() as session:
    session['value'] = 42

Внутренне это реализуется путем прохождения через временный контекст тестового запроса, и поскольку обработка сессии может зависеть от переменных запроса, эта функция принимает те же аргументы, что и test_request_context(), которые передаются напрямую.

Параметры:
  • args (Any) –

  • kwargs (Any) –

Тип результата:

Generator[SessionMixin, None, None]

Тестирование CLI Runner

class flask.testing.FlaskCliRunner(app, **kwargs)

CliRunner для тестирования команд CLI приложения Flask. Обычно создается с помощью test_cli_runner(). См. Выполнение команд с помощью программы CLI Runner.

Параметры:
invoke(cli=None, args=None, **kwargs)

Вызывает команду CLI в изолированной среде. Полную документацию по методу см. в CliRunner.invoke. Примеры см. в разделе Выполнение команд с помощью программы CLI Runner.

Если аргумент obj не указан, передается экземпляр ScriptInfo, который знает, как загрузить тестируемое приложение Flask.

Параметры:
  • cli (Optional[Any]) – Объект команды для вызова. По умолчанию это группа приложения cli.

  • args (Optional[Any]) – Список строк для вызова команды.

  • kwargs (Any) –

Результат:

объект Result.

Тип результата:

Any

Глобальные приложения

Для передачи данных, которые действительны только для одного запроса, от одной функции к другой глобальная переменная не подходит, поскольку она будет ломаться в многопоточных средах. Flask предоставляет вам специальный объект, который гарантирует, что он действителен только для активного запроса, и который будет возвращать разные значения для каждого запроса. В двух словах: он делает правильную вещь, как для request и session.

flask.g

Объект пространства имен, который может хранить данные во время application context. Это экземпляр Flask.app_ctx_globals_class, который по умолчанию равен ctx._AppCtxGlobals.

Это хорошее место для хранения ресурсов во время запроса. Например, функция before_request может загрузить объект пользователя из идентификатора сессии, а затем установить g.user для использования в функции представления.

Это прокси. См. раздел Примечания о доверенностях для получения дополнительной информации.

Changelog

Изменено в версии 0.10: Привязка к контексту приложения вместо контекста запроса.

class flask.ctx._AppCtxGlobals

Обычный объект. Используется в качестве пространства имен для хранения данных в контексте приложения.

Создание контекста приложения автоматически создает этот объект, который становится доступным как прокси g.

'key' in g

Проверьте, присутствует ли атрибут.

Changelog

Добавлено в версии 0.10.

iter(g)

Возвращает итератор по именам атрибутов.

Changelog

Добавлено в версии 0.10.

get(name, default=None)

Получение атрибута по имени или значению по умолчанию. Например, dict.get().

Параметры:
  • name (str) – Имя атрибута, который нужно получить.

  • default (Optional[Any]) – Значение, возвращаемое в случае отсутствия атрибута.

Тип результата:

Any

Changelog

Добавлено в версии 0.10.

pop(name, default=<object object>)

Получение и удаление атрибута по имени. Например, dict.pop().

Параметры:
  • name (str) – Имя атрибута, который нужно распечатать.

  • default (Any) – Значение, которое возвращается, если атрибут отсутствует, вместо того, чтобы выдать ошибку KeyError.

Тип результата:

Any

Changelog

Добавлено в версии 0.11.

setdefault(name, default=None)

Получить значение атрибута, если он присутствует, в противном случае установить и вернуть значение по умолчанию. Например, dict.setdefault().

Параметры:
  • name (str) – Имя атрибута, который нужно получить.

  • default (Optional[Any]) – Значение для установки и возврата, если атрибут отсутствует.

Тип результата:

Any

Changelog

Добавлено в версии 0.11.

Полезные функции и классы

flask.current_app

Прокси-сервер для приложения, обрабатывающего текущий запрос. Это полезно для доступа к приложению без необходимости его импорта или если его нельзя импортировать, например, при использовании шаблона фабрики приложений или в чертежах и расширениях.

Это доступно только при нажатии application context. Это происходит автоматически во время запросов и команд CLI. Им можно управлять вручную с помощью app_context().

Это прокси. См. раздел Примечания о доверенностях для получения дополнительной информации.

flask.has_request_context()

Если у вас есть код, который хочет проверить, есть ли контекст запроса или нет, можно использовать эту функцию. Например, вы можете захотеть воспользоваться информацией о запросе, если объект запроса доступен, но молча отказаться, если он недоступен.

class User(db.Model):

    def __init__(self, username, remote_addr=None):
        self.username = username
        if remote_addr is None and has_request_context():
            remote_addr = request.remote_addr
        self.remote_addr = remote_addr

В качестве альтернативы вы можете просто проверить любой из связанных контекстом объектов (например, request или g) на истинность:

class User(db.Model):

    def __init__(self, username, remote_addr=None):
        self.username = username
        if remote_addr is None and request:
            remote_addr = request.remote_addr
        self.remote_addr = remote_addr
Changelog

Добавлено в версии 0.7.

Тип результата:

bool

flask.copy_current_request_context(f)

Вспомогательная функция, которая украшает функцию для сохранения текущего контекста запроса. Это полезно при работе с гринлетами. В момент декорирования функции создается копия контекста запроса, которая затем выталкивается при вызове функции. Текущая сессия также включается в скопированный контекст запроса.

Пример:

import gevent
from flask import copy_current_request_context

@app.route('/')
def index():
    @copy_current_request_context
    def do_some_work():
        # do some work here, it can access flask.request or
        # flask.session like you would otherwise in the view function.
        ...
    gevent.spawn(do_some_work)
    return 'Regular response'
Changelog

Добавлено в версии 0.10.

Параметры:

f (Callable) –

Тип результата:

Callable

flask.has_app_context()

Работает как has_request_context(), но для контекста приложения. Вместо этого можно просто выполнить проверку булевой функции на объекте current_app.

Changelog

Добавлено в версии 0.9.

Тип результата:

bool

flask.url_for(endpoint, *, _anchor=None, _method=None, _scheme=None, _external=None, **values)

Генерирует URL-адрес к заданной конечной точке с заданными значениями.

Для этого требуется активный запрос или контекст приложения, и вызывается current_app.url_for(). См. полную документацию по этому методу.

Параметры:
  • endpoint (str) – Имя конечной точки, связанное с генерируемым URL. Если оно начинается с ., будет использовано текущее имя чертежа (если оно есть).

  • _anchor (Optional[str]) – Если задано, добавьте это как #anchor к URL.

  • _method (Optional[str]) – Если задано, генерирует URL, связанный с этим методом, для конечной точки.

  • _scheme (Optional[str]) – Если задано, то URL будет иметь эту схему, если он является внешним.

  • _external (Optional[bool]) – Если задано, предпочтительно, чтобы URL был внутренним (False) или требуется, чтобы он был внешним (True). Внешние URL включают схему и домен. Когда URL не находится в активном запросе, он по умолчанию является внешним.

  • values (Any) – Значения, используемые для переменных частей правила URL. Неизвестные ключи добавляются в качестве аргументов строки запроса, например ?a=b&c=d.

Тип результата:

str

Изменено в версии 2.2: Вызывает current_app.url_for, позволяя приложению переопределить поведение.

Changelog

Изменено в версии 0.10: Был добавлен параметр _scheme.

Изменено в версии 0.9: Были добавлены параметры _anchor и _method.

Изменено в версии 0.9: Вызывает app.handle_url_build_error при ошибках сборки.

flask.abort(code, *args, **kwargs)

Вызывает HTTPException для заданного кода состояния.

Если current_app доступен, он вызовет свой объект aborter, в противном случае будет использован werkzeug.exceptions.abort().

Параметры:
  • code (Union[int, BaseResponse]) – Код состояния для исключения, который должен быть зарегистрирован в app.aborter.

  • args (Any) – Передается в исключение.

  • kwargs (Any) – Передается в исключение.

Тип результата:

te.NoReturn

Добавлено в версии 2.2: Вызывает current_app.aborter, если доступно, вместо того, чтобы всегда использовать abort по умолчанию в Werkzeug.

flask.redirect(location, code=302, Response=None)

Создайте объект ответа перенаправления.

Если доступен current_app, то будет использоваться его метод redirect(), в противном случае будет использоваться werkzeug.utils.redirect().

Параметры:
  • location (str) – URL-адрес для перенаправления.

  • code (int) – Код состояния для перенаправления.

  • Response (Optional[Type[BaseResponse]]) – Класс ответа, который будет использоваться. Не используется при активном current_app, который использует app.response_class.

Тип результата:

BaseResponse

Добавлено в версии 2.2: Вызывает current_app.redirect, если доступно, вместо того, чтобы всегда использовать redirect по умолчанию в Werkzeug.

flask.make_response(*args)

Иногда возникает необходимость установить дополнительные заголовки в представлении. Поскольку представления не обязаны возвращать объекты ответа, а могут возвращать значение, которое преобразуется в объект ответа самой Flask, добавление заголовков к ним становится непростой задачей. Эту функцию можно вызвать вместо возврата, и вы получите объект ответа, который можно использовать для добавления заголовков.

Если вид выглядит так, и вы хотите добавить новый заголовок:

def index():
    return render_template('index.html', foo=42)

Теперь вы можете сделать примерно следующее:

def index():
    response = make_response(render_template('index.html', foo=42))
    response.headers['X-Parachutes'] = 'parachutes are cool'
    return response

Эта функция принимает те же аргументы, которые вы можете вернуть из функции представления. Это, например, создает ответ с кодом ошибки 404:

response = make_response(render_template('not_found.html'), 404)

Другим вариантом использования этой функции является принудительная передача возвращаемого значения функции представления в ответ, что полезно при использовании декораторов представления:

response = make_response(view_function())
response.headers['X-Parachutes'] = 'parachutes are cool'

Внутри эта функция выполняет следующие действия:

  • если аргументы не переданы, то создается новый аргумент ответа

  • если передан один аргумент, flask.Flask.make_response() вызывается с ним.

  • если передано более одного аргумента, аргументы передаются в функцию flask.Flask.make_response() в виде кортежа.

Changelog

Добавлено в версии 0.6.

Параметры:

args (Any) –

Тип результата:

Response

flask.after_this_request(f)

Выполняет функцию после данного запроса. Это полезно для изменения объектов ответа. Функции передается объект ответа, и она должна вернуть тот же или новый объект.

Пример:

@app.route('/')
def index():
    @after_this_request
    def add_header(response):
        response.headers['X-Foo'] = 'Parachute'
        return response
    return 'Hello World!'

Это более полезно, если функция, отличная от функции представления, хочет изменить ответ. Например, подумайте о декораторе, который хочет добавить некоторые заголовки без преобразования возвращаемого значения в объект ответа.

Changelog

Добавлено в версии 0.9.

Параметры:

f (Union[Callable[[ResponseClass], ResponseClass], Callable[[ResponseClass], Awaitable[ResponseClass]]]) –

Тип результата:

Union[Callable[[ResponseClass], ResponseClass], Callable[[ResponseClass], Awaitable[ResponseClass]]]

flask.send_file(path_or_file, mimetype=None, as_attachment=False, download_name=None, conditional=True, etag=True, last_modified=None, max_age=None)

Отправить содержимое файла клиенту.

Первым аргументом может быть путь к файлу или объект, похожий на файл. Пути предпочтительнее в большинстве случаев, поскольку Werkzeug может управлять файлом и получать дополнительную информацию из пути. Передача файлоподобного объекта требует, чтобы файл был открыт в двоичном режиме, и в основном полезна при построении файла в памяти с помощью io.BytesIO.

Никогда не передавайте пути к файлам, предоставленные пользователем. Предполагается, что путь является доверенным, поэтому пользователь может создать путь для доступа к файлу, который вы не планировали. Используйте send_from_directory() для безопасной передачи запрошенных пользователем путей внутри каталога.

Если сервер WSGI задает file_wrapper в environ, то используется он, иначе используется встроенная обертка Werkzeug. В качестве альтернативы, если HTTP-сервер поддерживает X-Sendfile, настройка Flask с USE_X_SENDFILE = True скажет серверу отправить заданный путь, что гораздо эффективнее, чем читать его в Python.

Параметры:
  • path_or_file (Union[PathLike, str, BinaryIO]) – Путь к файлу для отправки, относительно текущего рабочего каталога, если указан относительный путь. Альтернативно, файлоподобный объект, открытый в двоичном режиме. Убедитесь, что указатель файла ищется до начала данных.

  • mimetype (Optional[str]) – Тип MIME, который следует отправить для файла. Если тип не указан, он будет пытаться определить его по имени файла.

  • as_attachment (bool) – Укажите браузеру, что он должен предложить сохранить файл вместо его отображения.

  • download_name (Optional[str]) – Имя по умолчанию, которое браузеры будут использовать при сохранении файла. По умолчанию соответствует переданному имени файла.

  • conditional (bool) – Включение условных и диапазонных ответов на основе заголовков запроса. Требуется передача пути к файлу и environ.

  • etag (Union[bool, str]) – Вычисляет ETag для файла, для чего требуется передать путь к файлу. Также может быть строкой для использования вместо него.

  • last_modified (Optional[Union[datetime, int, float]]) – Последнее измененное время отправки для файла, в секундах. Если оно не указано, будет сделана попытка определить его по пути к файлу.

  • max_age (Optional[Union[int, Callable[[Optional[str]], Optional[int]]]]) – Сколько времени клиент должен кэшировать файл, в секундах. Если установлено Cache-Control, то будет public, в противном случае будет no-cache, чтобы предпочесть условное кэширование.

Тип результата:

Response

Changelog

Изменено в версии 2.0: download_name заменяет параметр attachment_filename. Если as_attachment=False, то вместо него передается Content-Disposition: inline.

Изменено в версии 2.0: max_age заменяет параметр cache_timeout. conditional включен, а max_age по умолчанию не установлен.

Изменено в версии 2.0: etag заменяет параметр add_etags. Это может быть строка, которую можно использовать вместо генерируемой.

Изменено в версии 2.0: При передаче файлоподобного объекта, который наследуется от TextIOBase, будет возникать ошибка ValueError вместо передачи пустого файла.

Добавлено в версии 2.0: Переместил реализацию в Werkzeug. Теперь это обертка для передачи некоторых специфических для Flask аргументов.

Изменено в версии 1.1: filename может быть объектом PathLike.

Изменено в версии 1.1: Передача объекта BytesIO поддерживает запросы диапазона.

Изменено в версии 1.0.3: Имена файлов кодируются ASCII вместо Latin-1 для большей совместимости с серверами WSGI.

Изменено в версии 1.0: Поддерживаются имена файлов в формате UTF-8, указанные в RFC 2231.

Изменено в версии 0.12: Имя файла больше не выводится автоматически из объектов файлов. Если вы хотите использовать автоматическую поддержку MIME и etag, передавайте имя файла через filename_or_fp или attachment_filename.

Изменено в версии 0.12: attachment_filename предпочтительнее, чем filename для определения MIME.

Изменено в версии 0.9: По умолчанию cache_timeout имеет значение Flask.get_send_file_max_age().

Изменено в версии 0.7: Поддержка MIME-угадывания и etag для файлоподобных объектов была отменена из-за ненадежности. Если есть возможность, передайте имя файла, иначе прикрепите etag самостоятельно.

Изменено в версии 0.5: Добавлены параметры add_etags, cache_timeout и conditional. Поведение по умолчанию - добавление etags.

Добавлено в версии 0.2.

flask.send_from_directory(directory, path, **kwargs)

Отправка файла из каталога с помощью send_file().

@app.route("/uploads/<path:name>")
def download_file(name):
    return send_from_directory(
        app.config['UPLOAD_FOLDER'], name, as_attachment=True
    )

Это безопасный способ передачи файлов из папки, например, статических файлов или загрузок. Использует safe_join() для обеспечения того, что путь, приходящий от клиента, не будет злонамеренно составлен таким образом, чтобы указывать за пределы указанной директории.

Если конечный путь не указывает на существующий обычный файл, возникает ошибка 404 NotFound.

Параметры:
  • directory (Union[PathLike, str]) – Каталог, в котором должен находиться path, относительно корневого пути текущего приложения.

  • path (Union[PathLike, str]) – Путь к файлу для отправки, относительно directory.

  • kwargs (Any) – Аргументы для передачи в send_file().

Тип результата:

Response

Changelog

Изменено в версии 2.0: path заменяет параметр filename.

Добавлено в версии 2.0: Переместил реализацию в Werkzeug. Теперь это обертка для передачи некоторых специфических для Flask аргументов.

Добавлено в версии 0.5.

flask.escape()

Замените символы &, <, >, ' и " в строке на HTML-безопасные последовательности. Используйте эту функцию, если вам нужно отобразить текст, который может содержать такие символы в HTML.

Если у объекта есть метод __html__, то он вызывается, и предполагается, что возвращаемое значение уже безопасно для HTML.

Параметры:

s – Объект, который должен быть преобразован в строку и экранирован.

Результат:

Строка Markup с экранированным текстом.

class flask.Markup(base='', encoding=None, errors='strict')

Строка, готовая к безопасной вставке в документ HTML или XML либо потому, что она была экранирована, либо потому, что она была помечена как безопасная.

Передача объекта в конструктор преобразует его в текст и оборачивает его, чтобы пометить его безопасным без экранирования. Чтобы экранировать текст, используйте вместо этого метод класса escape().

>>> Markup("Hello, <em>World</em>!")
Markup('Hello, <em>World</em>!')
>>> Markup(42)
Markup('42')
>>> Markup.escape("Hello, <em>World</em>!")
Markup('Hello &lt;em&gt;World&lt;/em&gt;!')

Это реализует интерфейс __html__(), который используют некоторые фреймворки. Передача объекта, реализующего __html__(), обернет вывод этого метода, пометив его как безопасный.

>>> class Foo:
...     def __html__(self):
...         return '<a href="/foo">foo</a>'
...
>>> Markup(Foo())
Markup('<a href="/foo">foo</a>')

Это подкласс str. Он имеет те же методы, но экранирует их аргументы и возвращает экземпляр Markup.

>>> Markup("<em>%s</em>") % ("foo & bar",)
Markup('<em>foo &amp; bar</em>')
>>> Markup("<em>Hello</em> ") + "<foo>"
Markup('<em>Hello</em> &lt;foo&gt;')
Параметры:
Тип результата:

Markup

classmethod escape(s)

Эскейп строки. Вызывает escape() и гарантирует, что для подклассов возвращается правильный тип.

Параметры:

s (Any) –

Тип результата:

Markup

striptags()

unescape() разметку, удалить теги и нормализовать пробельные символы до одинарных пробелов.

>>> Markup("Main &raquo;        <em>About</em>").striptags()
'Main » About'
Тип результата:

str

unescape()

Преобразование экранированной разметки обратно в текстовую строку. При этом сущности HTML заменяются символами, которые они представляют.

>>> Markup("Main &raquo; <em>About</em>").unescape()
'Main » <em>About</em>'
Тип результата:

str

Мигание сообщения

flask.flash(message, category='message')

Выводит сообщение до следующего запроса. Для того чтобы удалить промелькнувшее сообщение из сессии и показать его пользователю, шаблон должен вызвать get_flashed_messages().

Changelog

Изменено в версии 0.3: Добавлен параметр category.

Параметры:
  • message (str) – сообщение, которое будет выведено на экран.

  • category (str) – категория для сообщения. Рекомендуются следующие значения: 'message' для сообщений любого типа, 'error' для ошибок, 'info' для информационных сообщений и 'warning' для предупреждений. Однако в качестве категории может быть использована любая строка.

Тип результата:

None

flask.get_flashed_messages(with_categories=False, category_filter=())

Извлекает из сессии все промелькнувшие сообщения и возвращает их. Дальнейшие вызовы функции в том же запросе вернут те же сообщения. По умолчанию возвращаются только сообщения, но если with_categories имеет значение True, возвращаемое значение будет представлять собой список кортежей в форме (category, message).

Отфильтруйте промелькнувшие сообщения по одной или нескольким категориям, указав эти категории в category_filter. Это позволяет отображать категории в отдельных html-блоках. Аргументы with_categories и category_filter различны:

  • with_categories контролирует, возвращаются ли категории вместе с текстом сообщения (True дает кортеж, где False дает только текст сообщения).

  • category_filter отфильтровывает сообщения только до тех, которые соответствуют заданным категориям.

Примеры см. в разделе Мигание сообщения.

Changelog

Изменено в версии 0.9: Добавлен параметр category_filter.

Изменено в версии 0.3: Добавлен параметр с_категориями.

Параметры:
  • with_categories (bool) – установите значение True, чтобы также получать категории.

  • category_filter (Iterable[str]) – фильтр категорий для ограничения возвращаемых значений. Будут возвращены только категории из списка.

Тип результата:

Union[List[str], List[Tuple[str, str]]]

Поддержка JSON

По умолчанию Flask использует встроенный модуль Python json для работы с JSON. Реализацию JSON можно изменить, назначив другой провайдер на flask.Flask.json_provider_class или flask.Flask.json. Функции, предоставляемые flask.json, будут использовать методы на app.json, если контекст приложения активен.

Фильтр |tojson в Jinja настроен на использование JSON-провайдера приложения. Фильтр помечает выходные данные тегами |safe. Используйте его для вывода данных внутри тегов HTML <script>.

<script>
    const names = {{ names|tojson }};
    renderChart(names, {{ axis_data|tojson }});
</script>
flask.json.jsonify(*args, **kwargs)

Сериализуйте заданные аргументы как JSON и верните объект Response с миметипом application/json. Дикт или список, возвращаемый из представления, будет автоматически преобразован в JSON-ответ без необходимости вызова этой функции.

Для этого требуется активный запрос или контекст приложения, а также вызов app.json.response().

В режиме отладки вывод форматируется с отступами, чтобы его было легче читать. Это также может контролироваться провайдером.

Можно указать либо позиционный аргумент, либо ключевое слово, но не оба. Если аргументы не указаны, сериализуется None.

Параметры:
  • args (t.Any) – Одно значение для сериализации или несколько значений для сериализации в виде списка.

  • kwargs (t.Any) – Рассматривается как dict для сериализации.

Тип результата:

Response

Изменено в версии 2.2: Вызывает current_app.json.response, позволяя приложению переопределить поведение.

Changelog

Изменено в версии 2.0.2: decimal.Decimal поддерживается путем преобразования в строку.

Изменено в версии 0.11: Добавлена поддержка сериализации массивов верхнего уровня. Это было риском для безопасности в древних браузерах. См. Безопасность JSON.

Добавлено в версии 0.2.

flask.json.dumps(obj, *, app=None, **kwargs)

Сериализация данных в формате JSON.

Если доступен current_app, то будет использоваться его метод app.json.dumps(), в противном случае будет использоваться json.dumps().

Параметры:
  • obj (t.Any) – Данные для сериализации.

  • kwargs (t.Any) – Аргументы, передаваемые реализации dumps.

  • app (Flask | None) –

Тип результата:

str

Изменено в версии 2.2: Вызывает current_app.json.dumps, позволяя приложению переопределить поведение.

Изменено в версии 2.2: Параметр app будет удален во Flask 2.3.

Changelog

Изменено в версии 2.0.2: decimal.Decimal поддерживается путем преобразования в строку.

Изменено в версии 2.0: encoding будет удален в версии Flask 2.1.

Изменено в версии 1.0.3: app можно передавать напрямую, а не требовать контекст приложения для настройки.

flask.json.dump(obj, fp, *, app=None, **kwargs)

Сериализация данных в формате JSON и запись в файл.

Если доступен current_app, то будет использоваться его метод app.json.dump(), в противном случае будет использоваться json.dump().

Параметры:
  • obj (t.Any) – Данные для сериализации.

  • fp (t.IO[str]) – Файл, открытый для записи текста. Должен использовать кодировку UTF-8, чтобы быть действительным JSON.

  • kwargs (t.Any) – Аргументы, передаваемые реализации dump.

  • app (Flask | None) –

Тип результата:

None

Изменено в версии 2.2: Вызывает current_app.json.dump, позволяя приложению переопределить поведение.

Изменено в версии 2.2: Параметр app будет удален во Flask 2.3.

Changelog

Изменено в версии 2.0: Запись в двоичный файл и аргумент encoding будут удалены во Flask 2.1.

flask.json.loads(s, *, app=None, **kwargs)

Десериализуйте данные в формате JSON.

Если доступен current_app, то будет использоваться его метод app.json.loads(), в противном случае будет использоваться json.loads().

Параметры:
  • s (str | bytes) – Текст или байты в формате UTF-8.

  • kwargs (t.Any) – Аргументы, передаваемые реализации loads.

  • app (Flask | None) –

Тип результата:

t.Any

Изменено в версии 2.2: Вызывает current_app.json.loads, позволяя приложению переопределить поведение.

Изменено в версии 2.2: Параметр app будет удален во Flask 2.3.

Changelog

Изменено в версии 2.0: encoding будет удален в версии Flask 2.1. Данные должны быть строкой или байтами UTF-8.

Изменено в версии 1.0.3: app можно передавать напрямую, а не требовать контекст приложения для настройки.

flask.json.load(fp, *, app=None, **kwargs)

Десериализуйте данные в формате JSON, считанные из файла.

Если доступен current_app, то будет использоваться его метод app.json.load(), в противном случае будет использоваться json.load().

Параметры:
  • fp (t.IO[t.AnyStr]) – Файл, открытый для чтения текста или байтов UTF-8.

  • kwargs (t.Any) – Аргументы, передаваемые реализации load.

  • app (Flask | None) –

Тип результата:

t.Any

Изменено в версии 2.2: Вызывает current_app.json.load, позволяя приложению переопределить поведение.

Изменено в версии 2.2: Параметр app будет удален во Flask 2.3.

Changelog

Изменено в версии 2.0: encoding будет удален в версии Flask 2.1. Файл должен быть текстовым или двоичным с байтами UTF-8.

class flask.json.provider.JSONProvider(app)

Стандартный набор операций JSON для приложения. Подклассы этого класса можно использовать для настройки поведения JSON или использования различных библиотек JSON.

Чтобы реализовать провайдер для конкретной библиотеки, подклассифицируйте этот базовый класс и реализуйте как минимум dumps() и loads(). Все остальные методы имеют реализацию по умолчанию.

Чтобы использовать другой провайдер, либо подкласс Flask и установите json_provider_class в класс провайдера, либо установите app.json в экземпляр класса.

Параметры:

app (Flask) – Экземпляр приложения. Он будет храниться как weakref.proxy на атрибуте _app.

Добавлено в версии 2.2.

dumps(obj, **kwargs)

Сериализация данных в формате JSON.

Параметры:
  • obj (Any) – Данные для сериализации.

  • kwargs (Any) – Может быть передан базовой библиотеке JSON.

Тип результата:

str

dump(obj, fp, **kwargs)

Сериализация данных в формате JSON и запись в файл.

Параметры:
  • obj (Any) – Данные для сериализации.

  • fp (IO[str]) – Файл, открытый для записи текста. Должен использовать кодировку UTF-8, чтобы быть действительным JSON.

  • kwargs (Any) – Может быть передан базовой библиотеке JSON.

Тип результата:

None

loads(s, **kwargs)

Десериализуйте данные в формате JSON.

Параметры:
  • s (str | bytes) – Текст или байты в формате UTF-8.

  • kwargs (Any) – Может быть передан базовой библиотеке JSON.

Тип результата:

Any

load(fp, **kwargs)

Десериализуйте данные в формате JSON, считанные из файла.

Параметры:
  • fp (IO) – Файл, открытый для чтения текста или байтов UTF-8.

  • kwargs (Any) – Может быть передан базовой библиотеке JSON.

Тип результата:

Any

response(*args, **kwargs)

Сериализует заданные аргументы как JSON и возвращает объект Response с миметипом application/json.

Функция jsonify() вызывает этот метод для текущего приложения.

Можно указать либо позиционный аргумент, либо ключевое слово, но не оба. Если аргументы не указаны, сериализуется None.

Параметры:
  • args (t.Any) – Одно значение для сериализации или несколько значений для сериализации в виде списка.

  • kwargs (t.Any) – Рассматривается как dict для сериализации.

Тип результата:

Response

class flask.json.provider.DefaultJSONProvider(app)

Обеспечьте операции JSON, используя встроенную библиотеку Python json. Сериализует следующие дополнительные типы данных:

  • datetime.datetime и datetime.date сериализуются в строки RFC 822. Это то же самое, что и формат даты HTTP.

  • uuid.UUID сериализуется в строку.

  • dataclasses.dataclass передается в dataclasses.asdict().

  • Markup (или любой объект с методом __html__) вызовет метод __html__ для получения строки.

Параметры:

app (Flask) –

static default(o)

Примените эту функцию к любому объекту, который json.dumps() не знает, как сериализовать. Она должна вернуть правильный тип JSON или выдать ошибку TypeError.

Параметры:

o (Any) –

Тип результата:

Any

ensure_ascii = True

Заменить символы, не относящиеся к ASCII, на управляющие последовательности. Это может быть более совместимо с некоторыми клиентами, но может быть отключено для повышения производительности и размера.

sort_keys = True

Сортировка ключей в любых сериализованных массивах. Это может быть полезно для некоторых ситуаций кэширования, но может быть отключено для повышения производительности. Когда эта функция включена, все ключи должны быть строками, они не преобразуются перед сортировкой.

compact: bool | None = None

Если True, или None вне режима отладки, вывод response() не будет добавлять отступы, новые строки или пробелы. Если False или None в режиме отладки, то будет использоваться некомпактное представление.

mimetype = 'application/json'

Миметип, установленный в response().

dumps(obj, **kwargs)

Сериализация данных в виде JSON в строку.

Аргументы ключевых слов передаются в json.dumps(). Устанавливает некоторые параметры по умолчанию из атрибутов default, ensure_ascii и sort_keys.

Параметры:
  • obj (Any) – Данные для сериализации.

  • kwargs (Any) – Передается в json.dumps().

Тип результата:

str

loads(s, **kwargs)

Десериализуйте данные в формате JSON из строки или байтов.

Параметры:
  • s (str | bytes) – Текст или байты в формате UTF-8.

  • kwargs (Any) – Передается в json.loads().

Тип результата:

Any

response(*args, **kwargs)

Сериализует заданные аргументы в виде JSON и возвращает с ними объект Response. Миметип ответа будет «application/json» и может быть изменен с помощью mimetype.

Если compact равно False или включен режим отладки, вывод будет отформатирован так, чтобы его было легче читать.

Можно указать либо позиционный аргумент, либо ключевое слово, но не оба. Если аргументы не указаны, сериализуется None.

Параметры:
  • args (t.Any) – Одно значение для сериализации или несколько значений для сериализации в виде списка.

  • kwargs (t.Any) – Рассматривается как dict для сериализации.

Тип результата:

Response

class flask.json.JSONEncoder(**kwargs)

Кодировщик JSON по умолчанию. Обрабатывает дополнительные типы по сравнению со встроенным json.JSONEncoder.

  • datetime.datetime и datetime.date сериализуются в строки RFC 822. Это то же самое, что и формат даты HTTP.

  • decimal.Decimal сериализуется в строку.

  • uuid.UUID сериализуется в строку.

  • dataclasses.dataclass передается в dataclasses.asdict().

  • Markup (или любой объект с методом __html__) вызовет метод __html__ для получения строки.

Присвойте подклассу this значение flask.Flask.json_encoder или flask.Blueprint.json_encoder, чтобы переопределить значение по умолчанию.

Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3. Вместо этого используйте app.json.

default(o)

Преобразуйте o в сериализуемый тип JSON. См. json.JSONEncoder.default(). Python не поддерживает переопределение способа сериализации базовых типов, таких как str или list, они обрабатываются перед этим методом.

Параметры:

o (Any) –

Тип результата:

Any

class flask.json.JSONDecoder(**kwargs)

Декодер JSON по умолчанию.

Это не меняет никакого поведения по сравнению со встроенным json.JSONDecoder.

Присвойте подклассу this значение flask.Flask.json_decoder или flask.Blueprint.json_decoder, чтобы переопределить значение по умолчанию.

Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3. Вместо этого используйте app.json.

JSON с метками

Компактное представление для сериализации без потерь нестандартных типов JSON. SecureCookieSessionInterface использует его для сериализации данных сессии, но оно может быть полезно и в других местах. Оно может быть расширено для поддержки других типов.

class flask.json.tag.TaggedJSONSerializer

Сериализатор, использующий систему тегов для компактного представления объектов, не являющихся типами JSON. Передается в качестве промежуточного сериализатора в itsdangerous.Serializer.

Поддерживаются следующие дополнительные типы:

default_tags = [<class 'flask.json.tag.TagDict'>, <class 'flask.json.tag.PassDict'>, <class 'flask.json.tag.TagTuple'>, <class 'flask.json.tag.PassList'>, <class 'flask.json.tag.TagBytes'>, <class 'flask.json.tag.TagMarkup'>, <class 'flask.json.tag.TagUUID'>, <class 'flask.json.tag.TagDateTime'>]

Теги классов для привязки при создании сериализатора. Другие теги могут быть добавлены позже с помощью register().

dumps(value)

Пометить значение и сбросить его в компактную строку JSON.

Параметры:

value (Any) –

Тип результата:

str

loads(value)

Загрузка данных из строки JSON и десериализация всех помеченных объектов.

Параметры:

value (str) –

Тип результата:

Any

register(tag_class, force=False, index=None)

Зарегистрируйте новый тег в этом сериализаторе.

Параметры:
  • tag_class (Type[JSONTag]) – класс тега для регистрации. Будет инстанцирован с этим экземпляром сериализатора.

  • force (bool) – перезаписать существующий тег. Если false (по умолчанию), то выдается предупреждение KeyError.

  • index (Optional[int]) – индекс для вставки нового тега в порядок тегов. Полезно, когда новый тег является частным случаем существующего. Если None (по умолчанию), тег добавляется в конец порядка.

Исключение:

KeyError – если ключ тега уже зарегистрирован и force не является истиной.

Тип результата:

None

tag(value)

При необходимости преобразуйте значение в маркированное представление.

Параметры:

value (Any) –

Тип результата:

Dict[str, Any]

untag(value)

C

Параметры:

value (Dict[str, Any]) –

Тип результата:

Any

class flask.json.tag.JSONTag(serializer)

B

Параметры:

serializer (TaggedJSONSerializer) –

check(value)

C

Параметры:

value (Any) –

Тип результата:

bool

key: Optional[str] = None

T

tag(value)

C

Параметры:

value (Any) –

Тип результата:

Any

to_json(value)

C

Параметры:

value (Any) –

Тип результата:

Any

to_python(value)

C

Параметры:

value (Any) –

Тип результата:

Any

L

from flask.json.tag import JSONTag

class TagOrderedDict(JSONTag):
    __slots__ = ('serializer',)
    key = ' od'

    def check(self, value):
        return isinstance(value, OrderedDict)

    def to_json(self, value):
        return [[k, self.serializer.tag(v)] for k, v in iteritems(value)]

    def to_python(self, value):
        return OrderedDict(value)

app.session_interface.serializer.register(TagOrderedDict, index=0)

Рендеринг шаблонов

flask.render_template(template_name_or_list, **context)

Рендеринг шаблона по имени с заданным контекстом.

Параметры:
  • template_name_or_list (Union[str, Template, List[Union[str, Template]]]) – Имя шаблона для рендеринга. Если задан список, будет отображено первое существующее имя.

  • context (Any) – Переменные, которые необходимо сделать доступными в шаблоне.

Тип результата:

str

flask.render_template_string(source, **context)

Вернуть шаблон из заданной исходной строки с заданным контекстом.

Параметры:
  • source (str) – Исходный код шаблона для рендеринга.

  • context (Any) – Переменные, которые необходимо сделать доступными в шаблоне.

Тип результата:

str

flask.stream_template(template_name_or_list, **context)

Рендеринг шаблона по имени с заданным контекстом в виде потока. Возвращается итератор строк, который можно использовать как потоковый ответ от представления.

Параметры:
  • template_name_or_list (Union[str, Template, List[Union[str, Template]]]) – Имя шаблона для рендеринга. Если задан список, будет отображено первое существующее имя.

  • context (Any) – Переменные, которые необходимо сделать доступными в шаблоне.

Тип результата:

Iterator[str]

Добавлено в версии 2.2.

flask.stream_template_string(source, **context)

Рендеринг шаблона из заданной исходной строки с заданным контекстом в виде потока. Возвращается итератор строк, который может быть использован в качестве потокового ответа представления.

Параметры:
  • source (str) – Исходный код шаблона для рендеринга.

  • context (Any) – Переменные, которые необходимо сделать доступными в шаблоне.

Тип результата:

Iterator[str]

Добавлено в версии 2.2.

flask.get_template_attribute(template_name, attribute)

Загружает макрос (или переменную), экспортируемый шаблоном. Это можно использовать для вызова макроса из кода Python. Если, например, у вас есть шаблон с именем _cider.html со следующим содержимым:

{% macro hello(name) %}Hello {{ name }}!{% endmacro %}

Вы можете получить к нему доступ из кода Python следующим образом:

hello = get_template_attribute('_cider.html', 'hello')
return hello('World')
Changelog

Добавлено в версии 0.2.

Параметры:
  • template_name (str) – имя шаблона

  • attribute (str) – имя переменной макроса, к которой нужно получить доступ

Тип результата:

Any

Конфигурация

class flask.Config(root_path, defaults=None)

Работает точно так же, как dict, но предоставляет возможность заполнять его из файлов или специальных словарей. Существует два общих шаблона заполнения конфигурации.

Либо вы можете заполнить конфигурацию из файла конфигурации:

app.config.from_pyfile('yourconfig.cfg')

В качестве альтернативы вы можете определить параметры конфигурации в модуле, который вызывает from_object(), или указать путь импорта к модулю, который должен быть загружен. Можно также указать ему использовать тот же модуль и предоставить значения конфигурации непосредственно перед вызовом:

DEBUG = True
SECRET_KEY = 'development key'
app.config.from_object(__name__)

В обоих случаях (загрузка из любого файла Python или загрузка из модулей) в конфиг добавляются только ключи в верхнем регистре. Это позволяет использовать строчные значения в файле config для временных значений, которые не добавляются в config, или определить ключи config в том же файле, в котором реализуется приложение.

Вероятно, самый интересный способ загрузки конфигураций - из переменной окружения, указывающей на файл:

app.config.from_envvar('YOURAPPLICATION_SETTINGS')

В этом случае перед запуском приложения необходимо установить эту переменную окружения на файл, который вы хотите использовать. В Linux и OS X используйте оператор экспорта:

export YOURAPPLICATION_SETTINGS='/path/to/config/file'

В windows вместо этого используйте set.

Параметры:
  • root_path (str) – путь, с которого производится относительное чтение файлов. Когда объект config создается приложением, это его root_path.

  • defaults (Optional[dict]) – необязательный словарь значений по умолчанию

from_envvar(variable_name, silent=False)

Загружает конфигурацию из переменной окружения, указывающей на файл конфигурации. По сути, это просто сокращение с более приятными сообщениями об ошибках для этой строки кода:

app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])
Параметры:
  • variable_name (str) – имя переменной среды

  • silent (bool) – установите значение True, если вы хотите получить тихий отказ при отсутствии файлов.

Результат:

True если файл был загружен успешно.

Тип результата:

bool

from_file(filename, load, silent=False)

Обновление значений в конфигурации из файла, который загружается с помощью параметра load. Загруженные данные передаются в метод from_mapping().

import json
app.config.from_file("config.json", load=json.load)

import toml
app.config.from_file("config.toml", load=toml.load)
Параметры:
  • filename (str) – Путь к файлу данных. Это может быть абсолютный путь или относительный путь к корневому пути конфигурации.

  • load (Callable[[Reader], Mapping] where Reader implements a read method.) – Вызываемая программа, которая принимает хэндл файла и возвращает отображение загруженных данных из файла.

  • silent (bool) – Игнорируйте файл, если он не существует.

Результат:

True если файл был загружен успешно.

Тип результата:

bool

Changelog

Добавлено в версии 2.0.

from_mapping(mapping=None, **kwargs)

Обновляет конфигурацию типа update(), игнорируя элементы с неверхними ключами.

Результат:

Всегда возвращает True.

Параметры:
Тип результата:

bool

Changelog

Добавлено в версии 0.11.

from_object(obj)

U

  • строка: в этом случае будет импортирован объект с таким именем

  • фактическая ссылка на объект: этот объект используется напрямую

Объектами обычно являются либо модули, либо классы. from_object() загружает только атрибуты модуля/класса в верхнем регистре. Объект dict не будет работать с from_object(), потому что ключи dict не являются атрибутами класса dict.

Пример конфигурации на основе модулей:

app.config.from_object('yourapplication.default_config')
from yourapplication import default_config
app.config.from_object(default_config)

Перед загрузкой с объектом ничего не делается. Если объект является классом и имеет атрибуты @property, его необходимо инстанцировать перед передачей в этот метод.

Вы не должны использовать эту функцию для загрузки фактической конфигурации, а скорее конфигурации по умолчанию. Фактическая конфигурация должна быть загружена с помощью from_pyfile() и в идеале из места, не входящего в пакет, поскольку пакет может быть установлен в системе.

См. Разработка / Производство пример конфигурации на основе классов с использованием from_object().

Параметры:

obj (Union[object, str]) – имя или объект импорта

Тип результата:

None

from_prefixed_env(prefix='FLASK', *, loads=<function loads>)

Загружает все переменные окружения, которые начинаются с FLASK_, отбрасывая префикс из ключа env для ключа config. Значения передаются через функцию загрузки, чтобы попытаться преобразовать их в более конкретные типы, чем строки.

Клавиши загружаются в порядке sorted().

Функция загрузки по умолчанию пытается разобрать значения как любой допустимый тип JSON, включая dicts и списки.

Конкретные элементы во вложенных диктах могут быть установлены путем разделения ключей двойным подчеркиванием (__). Если промежуточный ключ не существует, он будет инициализирован пустым диктом.

Параметры:
  • prefix (str) – Загрузите переменные env, начинающиеся с этого префикса, разделенные знаком подчеркивания (_).

  • loads (Callable[[str], Any]) – Передайте каждое строковое значение в эту функцию и используйте возвращаемое значение в качестве значения конфигурации. Если возникает какая-либо ошибка, она игнорируется, и значение остается строкой. По умолчанию используется значение json.loads().

Тип результата:

bool

Changelog

Добавлено в версии 2.1.

from_pyfile(filename, silent=False)

Обновляет значения в конфиге из файла Python. Эта функция ведет себя так, как если бы файл был импортирован как модуль с помощью функции from_object().

Параметры:
  • filename (str) – имя файла конфигурации. Это может быть либо абсолютное имя файла, либо имя относительно корневого пути.

  • silent (bool) – установите значение True, если вы хотите получить тихий отказ при отсутствии файлов.

Результат:

True если файл был загружен успешно.

Тип результата:

bool

Changelog

Добавлено в версии 0.7: Параметр silent.

get_namespace(namespace, lowercase=True, trim_namespace=True)

Возвращает словарь, содержащий подмножество опций конфигурации, соответствующих указанному пространству имен/префиксу. Пример использования:

app.config['IMAGE_STORE_TYPE'] = 'fs'
app.config['IMAGE_STORE_PATH'] = '/var/app/images'
app.config['IMAGE_STORE_BASE_URL'] = 'http://img.website.com'
image_store_config = app.config.get_namespace('IMAGE_STORE_')

Результирующий словарь image_store_config будет выглядеть следующим образом:

{
    'type': 'fs',
    'path': '/var/app/images',
    'base_url': 'http://img.website.com'
}

Это часто бывает полезно, когда параметры конфигурации отображаются непосредственно на аргументы ключевых слов в функциях или конструкторах классов.

Параметры:
  • namespace (str) – пространство имен конфигурации

  • lowercase (bool) – флаг, указывающий, должны ли ключи результирующего словаря быть в нижнем регистре

  • trim_namespace (bool) – флаг, указывающий, не должны ли ключи результирующего словаря включать пространство имен

Тип результата:

Dict[str, Any]

Changelog

Добавлено в версии 0.11.

Помощники потока

flask.stream_with_context(generator_or_function)

Контексты запросов исчезают, когда ответ запускается на сервере. Это сделано из соображений эффективности и для того, чтобы снизить вероятность утечки памяти при использовании плохо написанных промежуточных программ WSGI. Недостатком является то, что если вы используете потоковые ответы, генератор больше не сможет получить доступ к информации о привязке запроса.

Однако эта функция может помочь вам сохранить контекст на более длительный срок:

from flask import stream_with_context, request, Response

@app.route('/stream')
def streamed_response():
    @stream_with_context
    def generate():
        yield 'Hello '
        yield request.args['name']
        yield '!'
    return Response(generate())

Также его можно использовать вокруг конкретного генератора:

from flask import stream_with_context, request, Response

@app.route('/stream')
def streamed_response():
    def generate():
        yield 'Hello '
        yield request.args['name']
        yield '!'
    return Response(stream_with_context(generate()))
Changelog

Добавлено в версии 0.9.

Параметры:

generator_or_function (Union[Iterator, Callable[[...], Iterator]]) –

Тип результата:

Iterator

Полезные внутренние компоненты

class flask.ctx.RequestContext(app, environ, request=None, session=None)

Контекст запроса содержит информацию о каждом запросе. Приложение Flask создает и выталкивает его в начале запроса, а затем вытаскивает его в конце запроса. Оно создаст адаптер URL и объект запроса для предоставленной среды WSGI.

Не пытайтесь использовать этот класс напрямую, вместо этого используйте test_request_context() и request_context() для создания этого объекта.

Когда контекст запроса выскочит, он оценит все функции, зарегистрированные в приложении для выполнения разрыва (teardown_request()).

Контекст запроса автоматически разворачивается в конце запроса. При использовании интерактивного отладчика контекст будет восстановлен, так что request будет по-прежнему доступен. Аналогично, тестовый клиент может сохранить контекст после завершения запроса. Однако функции разрыва могут уже закрыть некоторые ресурсы, например, соединения с базой данных.

Параметры:
copy()

Создает копию данного контекста запроса с тем же объектом запроса. Это может быть использовано для перемещения контекста запроса в другой гринлет. Поскольку фактический объект запроса тот же самый, это не может быть использовано для перемещения контекста запроса в другой поток, если доступ к объекту запроса не заблокирован.

Changelog

Изменено в версии 1.1: T

Добавлено в версии 0.10.

Тип результата:

RequestContext

match_request()

Может быть переопределен подклассом для получения информации о соответствии запроса.

Тип результата:

None

pop(exc=<object object>)

Разворачивает контекст запроса и развязывает его. Это также вызовет выполнение функций, зарегистрированных декоратором teardown_request().

Changelog

Изменено в версии 0.9: Добавлен аргумент exc.

Параметры:

exc (Optional[BaseException]) –

Тип результата:

None

flask.globals.request_ctx

Текущий RequestContext. Если контекст запроса не активен, обращение к атрибутам на этом прокси вызовет ошибку RuntimeError.

Это внутренний объект, который необходим для того, чтобы Flask обрабатывал запросы. В большинстве случаев доступ к нему не нужен. Скорее всего, вместо этого вам понадобятся request и session.

class flask.ctx.AppContext(app)

Контекст приложения содержит специфическую для приложения информацию. Контекст приложения создается и проталкивается в начале каждого запроса, если он еще не активен. Контекст приложения также передается при выполнении команд CLI.

Параметры:

app (Flask) –

pop(exc=<object object>)

P

Параметры:

exc (Optional[BaseException]) –

Тип результата:

None

push()

Привязывает контекст приложения к текущему контексту.

Тип результата:

None

flask.globals.app_ctx

Текущий AppContext. Если контекст приложения не активен, обращение к атрибутам этого прокси вызовет ошибку RuntimeError.

Это внутренний объект, который необходим для того, чтобы Flask обрабатывал запросы. В большинстве случаев доступ к нему не нужен. Скорее всего, вместо этого вам понадобятся current_app и g.

class flask.blueprints.BlueprintSetupState(blueprint, app, options, first_registration)

Временный объект-держатель для регистрации чертежа в приложении. Экземпляр этого класса создается методом make_setup_state() и в дальнейшем передается всем функциям обратного вызова register.

Параметры:
add_url_rule(rule, endpoint=None, view_func=None, **options)

Вспомогательный метод для регистрации правила (и, по желанию, функции представления) в приложении. Конечная точка автоматически получает префикс с именем чертежа.

Параметры:
Тип результата:

None

app

ссылка на текущее приложение

blueprint

ссылка на чертеж, который создал это состояние установки.

first_registration

поскольку чертежи могут быть зарегистрированы в приложении несколько раз, и не все хотят быть зарегистрированными в нем несколько раз, этот атрибут может быть использован для выяснения того, был ли чертеж уже зарегистрирован в прошлом.

options

словарь со всеми опциями, которые были переданы методу register_blueprint().

subdomain

Поддомен, для которого чертеж должен быть активен, None иначе.

url_defaults

Словарь с параметрами URL по умолчанию, который добавляется к каждому URL, определенному в чертеже.

url_prefix

Префикс, который должен использоваться для всех URL, определенных в чертеже.

Сигналы

Changelog

Добавлено в версии 0.6.

signals.signals_available

True, если система сигнализации доступна. Это происходит в том случае, если установлен blinker.

Во Flask существуют следующие сигналы:

flask.template_rendered

Этот сигнал отправляется, когда шаблон был успешно отрисован. Сигнал вызывается с экземпляром шаблона в качестве template и контекстом в качестве словаря (с именем context).

Пример абонента:

def log_template_renders(sender, template, context, **extra):
    sender.logger.debug('Rendering template "%s" with context %s',
                        template.name or 'string template',
                        context)

from flask import template_rendered
template_rendered.connect(log_template_renders, app)
flask.before_render_template

Этот сигнал посылается перед процессом рендеринга шаблона. Сигнал вызывается с экземпляром шаблона в качестве template и контекстом в качестве словаря (с именем context).

Пример абонента:

def log_template_renders(sender, template, context, **extra):
    sender.logger.debug('Rendering template "%s" with context %s',
                        template.name or 'string template',
                        context)

from flask import before_render_template
before_render_template.connect(log_template_renders, app)
flask.request_started

Этот сигнал посылается, когда контекст запроса установлен, до того, как произойдет какая-либо обработка запроса. Поскольку контекст запроса уже связан, абонент может получить доступ к запросу с помощью стандартных глобальных прокси, таких как request.

Пример абонента:

def log_request(sender, **extra):
    sender.logger.debug('Request context is set up')

from flask import request_started
request_started.connect(log_request, app)
flask.request_finished

Этот сигнал посылается непосредственно перед отправкой ответа клиенту. Ему передается отправляемый ответ с именем response.

Пример абонента:

def log_response(sender, response, **extra):
    sender.logger.debug('Request context is about to close down. '
                        'Response: %s', response)

from flask import request_finished
request_finished.connect(log_response, app)
flask.got_request_exception

Этот сигнал посылается, когда во время обработки запроса происходит необработанное исключение, в том числе при отладке. Исключение передается абоненту в виде exception.

Этот сигнал не посылается для HTTPException или других исключений, для которых зарегистрированы обработчики ошибок, если только исключение не было вызвано из обработчика ошибок.

В этом примере показано, как вести дополнительный журнал, если возникла теоретическая ошибка SecurityException:

from flask import got_request_exception

def log_security_exception(sender, exception, **extra):
    if not isinstance(exception, SecurityException):
        return

    security_logger.exception(
        f"SecurityException at {request.url!r}",
        exc_info=exception,
    )

got_request_exception.connect(log_security_exception, app)
flask.request_tearing_down

Этот сигнал посылается, когда запрос завершается. Он вызывается всегда, даже если возникло исключение. В настоящее время функции, прослушивающие этот сигнал, вызываются после обычных обработчиков завершения запроса, но на это нельзя полагаться.

Пример абонента:

def close_db_connection(sender, **extra):
    session.close()

from flask import request_tearing_down
request_tearing_down.connect(close_db_connection, app)

Начиная с версии Flask 0.9, сюда также будет передаваться аргумент с ключевым словом exc, содержащий ссылку на исключение, вызвавшее разрыв, если таковое имело место.

flask.appcontext_tearing_down

Этот сигнал отправляется, когда контекст приложения завершается. Он вызывается всегда, даже если возникло исключение. В настоящее время функции, прослушивающие этот сигнал, вызываются после обычных обработчиков разрыва, но на это нельзя полагаться.

Пример абонента:

def close_db_connection(sender, **extra):
    session.close()

from flask import appcontext_tearing_down
appcontext_tearing_down.connect(close_db_connection, app)

Ему также будет передан аргумент с ключевым словом exc, который содержит ссылку на исключение, вызвавшее разрыв, если таковое имело место.

flask.appcontext_pushed

Этот сигнал отправляется, когда контекст приложения выталкивается. Отправителем является приложение. Обычно это полезно для unittests, чтобы временно подключить информацию. Например, он может быть использован для ранней установки ресурса на объект g.

Пример использования:

from contextlib import contextmanager
from flask import appcontext_pushed

@contextmanager
def user_set(app, user):
    def handler(sender, **kwargs):
        g.user = user
    with appcontext_pushed.connected_to(handler, app):
        yield

И в тестовом коде:

def test_user_me(self):
    with user_set(app, 'john'):
        c = app.test_client()
        resp = c.get('/users/me')
        assert resp.data == 'username=john'
Changelog

Добавлено в версии 0.10.

flask.appcontext_popped

Этот сигнал отправляется, когда контекст приложения разворачивается. Отправителем является приложение. Обычно он совпадает с сигналом appcontext_tearing_down.

Changelog

Добавлено в версии 0.10.

flask.message_flashed

Этот сигнал отправляется, когда приложение получает сообщение. Сообщение отправляется в качестве аргумента ключевого слова message, а категория - в качестве category.

Пример абонента:

recorded = []
def record(sender, message, category, **extra):
    recorded.append((message, category))

from flask import message_flashed
message_flashed.connect(record, app)
Changelog

Добавлено в версии 0.10.

class signals.Namespace

Псевдоним для blinker.base.Namespace, если доступен blinker, иначе фиктивный класс, создающий поддельные сигналы. Этот класс доступен для расширений Flask, которые хотят обеспечить такую же систему отката, как и сама Flask.

signal(name, doc=None)

Создает новый сигнал для этого пространства имен, если доступен blinker, в противном случае возвращает поддельный сигнал, имеющий метод send, который ничего не сделает, но потерпит неудачу с RuntimeError для всех других операций, включая подключение.

Представления на основе классов

Changelog

Добавлено в версии 0.7.

class flask.views.View

Создайте подкласс этого класса и переопределите dispatch_request() для создания общего представления на основе класса. Вызовите as_view() для создания функции представления, которая создает экземпляр класса с заданными аргументами и вызывает его метод dispatch_request с любыми переменными URL.

Подробное руководство см. в разделе Представления на основе классов.

class Hello(View):
    init_every_request = False

    def dispatch_request(self, name):
        return f"Hello, {name}!"

app.add_url_rule(
    "/hello/<name>", view_func=Hello.as_view("hello")
)

Установите methods на класс, чтобы изменить, какие методы принимает представление.

Установите decorators на класс, чтобы применить список декораторов к сгенерированной функции представления. Декораторы, примененные к самому классу, не будут применены к сгенерированной функции представления!

Установите init_every_request на False для эффективности, если вам не нужно хранить глобальные данные запроса на self.

classmethod as_view(name, *class_args, **class_kwargs)

Преобразуйте класс в функцию представления, которая может быть зарегистрирована для маршрута.

По умолчанию сгенерированное представление будет создавать новый экземпляр класса представления для каждого запроса и вызывать его метод dispatch_request(). Если класс представления установит init_every_request в значение False, то для каждого запроса будет использоваться один и тот же экземпляр.

За исключением name, все остальные аргументы, переданные в этот метод, передаются методу класса представления __init__.

Изменено в версии 2.2: Добавлен атрибут класса init_every_request.

Параметры:
  • name (str) –

  • class_args (Any) –

  • class_kwargs (Any) –

Тип результата:

Union[Callable[[…], Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], WSGIApplication]], Callable[[…], Awaitable[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], WSGIApplication]]]]

decorators: ClassVar[List[Callable]] = []

Список декораторов, которые нужно применить в порядке убывания к сгенерированной функции представления. Помните, что синтаксис @decorator применяется снизу вверх, поэтому первый декоратор в списке будет нижним декоратором.

Changelog

Добавлено в версии 0.8.

dispatch_request()

Фактическое поведение функции представления. Подклассы должны переопределить его и вернуть правильный ответ. Любые переменные из правила URL передаются как аргументы ключевого слова.

Тип результата:

Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], WSGIApplication]

init_every_request: ClassVar[bool] = True

По умолчанию для каждого запроса создается новый экземпляр этого класса представления. Если подкласс представления устанавливает это значение в False, то для каждого запроса будет использоваться один и тот же экземпляр.

Один экземпляр более эффективен, особенно если во время init выполняется сложная настройка. Однако хранение данных на self больше не является безопасным при разных запросах, и вместо него следует использовать g.

Добавлено в версии 2.2.

methods: ClassVar[Optional[Collection[str]]] = None

Методы, для которых зарегистрировано данное представление. По умолчанию использует то же значение по умолчанию (["GET", "HEAD", "OPTIONS"]), что и route и add_url_rule.

provide_automatic_options: ClassVar[Optional[bool]] = None

Контролирует, обрабатывается ли метод OPTIONS автоматически. По умолчанию использует то же значение по умолчанию (True), что и route и add_url_rule.

class flask.views.MethodView

Передает методы запроса соответствующим методам экземпляра. Например, если вы реализуете метод get, он будет использоваться для обработки запросов GET.

Это может быть полезно при определении REST API.

methods устанавливается автоматически на основе методов, определенных в классе.

Подробное руководство см. в разделе Представления на основе классов.

class CounterAPI(MethodView):
    def get(self):
        return str(session.get("counter", 0))

    def post(self):
        session["counter"] = session.get("counter", 0) + 1
        return redirect(url_for("counter"))

app.add_url_rule(
    "/counter", view_func=CounterAPI.as_view("counter")
)
dispatch_request(**kwargs)

Фактическое поведение функции представления. Подклассы должны переопределить его и вернуть правильный ответ. Любые переменные из правила URL передаются как аргументы ключевого слова.

Параметры:

kwargs (Any) –

Тип результата:

Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, List[Any], Mapping[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Mapping[str, Union[str, List[str], Tuple[str, …]]], Sequence[Tuple[str, Union[str, List[str], Tuple[str, …]]]]]], WSGIApplication]

Регистрация маршрутов URL

Как правило, существует три способа определения правил для системы маршрутизации:

  1. Вы можете использовать декоратор flask.Flask.route().

  2. Вы можете использовать функцию flask.Flask.add_url_rule().

  3. Вы можете получить прямой доступ к базовой системе маршрутизации Werkzeug, которая отображается как flask.Flask.url_map.

Переменные части в маршруте могут быть указаны с помощью угловых скобок (/user/<username>). По умолчанию переменная часть в URL принимает любую строку без косой черты, однако можно указать и другой преобразователь, используя <converter:name>.

Переменные части передаются в функцию представления в качестве аргументов ключевых слов.

Имеются следующие преобразователи:

строка

принимает любой текст без косой черты (по умолчанию)

int

принимает целые числа

плоскость

как int, но для значений с плавающей точкой

путь

как по умолчанию, но также принимает косые черты

любой

соответствует одному из представленных пунктов

uuid

принимает строки UUID

Пользовательские конвертеры могут быть определены с помощью flask.Flask.url_map.

Вот несколько примеров:

@app.route('/')
def index():
    pass

@app.route('/<username>')
def show_user(username):
    pass

@app.route('/post/<int:post_id>')
def show_post(post_id):
    pass

Важная деталь, о которой следует помнить, - это то, как Flask работает с косой чертой. Идея заключается в том, чтобы каждый URL был уникальным, поэтому применяются следующие правила:

  1. Если правило заканчивается косой чертой и запрашивается пользователем без косой черты, пользователь автоматически перенаправляется на ту же страницу с добавлением косой черты.

  2. Если правило не заканчивается косой чертой, а пользователь запрашивает страницу с косой чертой, выдается сообщение 404 not found.

Это соответствует тому, как веб-серверы работают со статическими файлами. Это также позволяет безопасно использовать относительные цели ссылок.

Вы также можете определить несколько правил для одной и той же функции. Однако они должны быть уникальными. Можно также задавать значения по умолчанию. Вот, например, определение для URL, которое принимает необязательную страницу:

@app.route('/users/', defaults={'page': 1})
@app.route('/users/page/<int:page>')
def show_users(page):
    pass

Это указывает, что /users/ будет URL для первой страницы, а /users/page/N будет URL для страницы N.

Если URL содержит значение по умолчанию, он будет перенаправлен в его более простую форму с помощью 301 редиректа. В приведенном выше примере /users/page/1 будет перенаправлен на /users/. Если ваш маршрут обрабатывает запросы GET и POST, убедитесь, что маршрут по умолчанию обрабатывает только GET, поскольку перенаправления не могут сохранять данные формы.

@app.route('/region/', defaults={'id': 1})
@app.route('/region/<int:id>', methods=['GET', 'POST'])
def region(id):
   pass

Вот параметры, которые принимают route() и add_url_rule(). Единственное различие заключается в том, что при параметре route функция представления определяется декоратором вместо параметра view_func.

правило

правило URL в виде строки

конечная точка

конечная точка для зарегистрированного правила URL. Flask сам предполагает, что имя функции представления является именем конечной точки, если это не указано явно.

view_func

функция для вызова при обслуживании запроса к указанной конечной точке. Если функция не указана, ее можно задать позже, сохранив в словаре view_functions с конечной точкой в качестве ключа.

умолчания

Словарь с параметрами по умолчанию для этого правила. О том, как работают значения по умолчанию, см. пример выше.

subdomain

определяет правило для субдомена в случае, если используется согласование субдоменов. Если не указано, то принимается поддомен по умолчанию.

**options

опции, которые должны быть переданы базовому объекту Rule. Изменением в Werkzeug является обработка опций метода. methods - это список методов, которыми должно быть ограничено это правило (GET, POST и т.д.). По умолчанию правило слушает только GET (и неявно HEAD). Начиная с версии Flask 0.6, OPTIONS добавляется неявно и обрабатывается стандартной обработкой запросов. Они должны быть указаны в качестве аргументов ключевых слов.

Просмотр опций функций

Для внутреннего использования функции представления могут иметь некоторые атрибуты для настройки поведения, которое функция представления обычно не контролирует. Следующие атрибуты могут быть предоставлены опционально, чтобы отменить некоторые значения по умолчанию add_url_rule() или общее поведение:

  • __name__: Имя функции по умолчанию используется в качестве конечной точки. Если конечная точка указана явно, то используется это значение. Кроме того, по умолчанию к этому значению будет добавлено имя чертежа, которое нельзя настроить из самой функции.

  • методы: Если методы не указаны при добавлении правила URL, Flask будет искать в самом объекте функции представления, существует ли атрибут methods. Если он есть, то информация о методах будет взята оттуда.

  • provide_automatic_options: если этот атрибут установлен, Flask будет принудительно включать или отключать автоматическую реализацию ответа HTTP OPTIONS. Это может быть полезно при работе с декораторами, которые хотят настраивать ответ OPTIONS на основе каждого вида.

  • required_methods: если этот атрибут установлен, Flask всегда будет добавлять эти методы при регистрации правила URL, даже если методы были явно переопределены в вызове route().

Полный пример:

def index():
    if request.method == 'OPTIONS':
        # custom options handling here
        ...
    return 'Hello World!'
index.provide_automatic_options = False
index.methods = ['GET', 'OPTIONS']

app.add_url_rule('/', index)
Changelog

Добавлено в версии 0.8: Добавлена функциональность provide_automatic_options.

Интерфейс командной строки

class flask.cli.FlaskGroup(add_default_commands=True, create_app=None, add_version_option=True, load_dotenv=True, set_debug_flag=True, **extra)

Специальный подкласс группы AppGroup, который поддерживает загрузку большего количества команд из сконфигурированного приложения Flask. Обычно разработчику не нужно взаимодействовать с этим классом, но есть некоторые очень продвинутые случаи использования, для которых имеет смысл создать его экземпляр. см.

Параметры:
  • add_default_commands (bool) – если это значение равно True, то будут добавлены команды run и shell по умолчанию.

  • add_version_option (bool) – добавляет опцию --version.

  • create_app (t.Callable[..., Flask] | None) – необязательный обратный вызов, которому передается информация о сценарии и возвращается загруженное приложение.

  • load_dotenv (bool) – Загружает ближайшие файлы .env и .flaskenv для установки переменных окружения. Также изменит рабочий каталог на каталог, содержащий первый найденный файл.

  • set_debug_flag (bool) – Установите флаг отладки приложения.

  • extra (t.Any) –

Изменено в версии 2.2: Добавлены опции -A/--app, --debug/--no-debug, -e/--env-file.

Изменено в версии 2.2: Контекст приложения подталкивается при выполнении команд app.cli, поэтому @with_appcontext больше не требуется для этих команд.

Changelog

Изменено в версии 1.0: Если он установлен, python-dotenv будет использоваться для загрузки переменных окружения из файлов .env и .flaskenv.

get_command(ctx, name)

Учитывая контекст и имя команды, возвращает объект Command, если он существует, или возвращает None.

list_commands(ctx)

Возвращает список имен подкоманд в том порядке, в котором они должны появляться.

make_context(info_name, args, parent=None, **extra)

Эта функция, получив имя info и аргументы, начнет разбор и создаст новый Context. Однако она не вызывает обратный вызов фактической команды.

Чтобы быстро настроить используемый класс контекста без переопределения этого метода, установите атрибут context_class.

Параметры:
  • info_name (str | None) – информационное имя для этого вызова. Как правило, это наиболее описательное имя сценария или команды. Для скрипта верхнего уровня это обычно имя скрипта, для команд ниже - имя команды.

  • args (list[str]) – аргументы для разбора в виде списка строк.

  • parent (Optional[Context]) – родительский контекст, если он доступен.

  • extra (Any) – дополнительные аргументы ключевых слов, передаваемые в конструктор контекста.

Тип результата:

Context

Изменено в версии 8.0: Добавлен атрибут context_class.

parse_args(ctx, args)

Учитывая контекст и список аргументов, создает парсер и разбирает аргументы, затем изменяет контекст по мере необходимости. Она автоматически вызывается командой make_context().

Параметры:
Тип результата:

list[str]

class flask.cli.AppGroup(name=None, commands=None, **attrs)

Это работает аналогично обычному щелчку Group, но изменяет поведение декоратора command() так, что он автоматически оборачивает функции в with_appcontext().

Не следует путать с FlaskGroup.

Параметры:
command(*args, **kwargs)

Этот метод работает точно так же, как одноименный метод на обычном click.Group, но он оборачивает обратные вызовы в with_appcontext(), если это не отключено путем передачи with_appcontext=False.

group(*args, **kwargs)

Это работает точно так же, как одноименный метод для обычного click.Group, но по умолчанию класс группы принимает значение AppGroup.

class flask.cli.ScriptInfo(app_import_path=None, create_app=None, set_debug_flag=True)

Объект-помощник для работы с приложениями Flask. Обычно нет необходимости взаимодействовать с ним, поскольку он используется внутри приложения при диспетчеризации нажатий. В будущих версиях Flask этот объект, скорее всего, будет играть более важную роль. Обычно он создается автоматически с помощью FlaskGroup, но вы также можете создать его вручную и передать его дальше как объект click.

Параметры:
  • app_import_path (str | None) –

  • create_app (t.Callable[..., Flask] | None) –

  • set_debug_flag (bool) –

app_import_path

Опционально путь импорта для приложения Flask.

create_app

Опционально функция, которой передается информация скрипта для создания экземпляра приложения.

data: t.Dict[t.Any, t.Any]

Словарь с произвольными данными, которые могут быть связаны с этой информацией скрипта.

load_app()

Загружает приложение Flask (если оно еще не загружено) и возвращает его. Многократный вызов этой функции приведет к тому, что будет возвращено уже загруженное приложение.

Тип результата:

Flask

flask.cli.load_dotenv(path=None)

Загрузите файлы «dotenv» в порядке старшинства для установки переменных окружения.

Если переменная env var уже установлена, она не перезаписывается, поэтому более ранние файлы в списке предпочтительнее более поздних.

Это не работает, если python-dotenv не установлен.

Параметры:

path (Optional[Union[str, PathLike]]) – Загрузите файл в этом месте вместо поиска.

Результат:

True если файл был загружен.

Тип результата:

bool

Changelog

Изменено в версии 2.0: Текущий каталог не изменяется на местоположение загруженного файла.

Изменено в версии 2.0: При загрузке файлов env установите кодировку по умолчанию на UTF-8.

Изменено в версии 1.1.0: Возвращает False, если python-dotenv не установлен, или если указанный путь не является файлом.

Добавлено в версии 1.0.

flask.cli.with_appcontext(f)

Обертывает обратный вызов так, что он гарантированно будет выполнен с контекстом приложения сценария.

Пользовательские команды (и их опции), зарегистрированные под app.cli или blueprint.cli, всегда будут иметь доступный контекст приложения, в этом случае данный декоратор не требуется.

Изменено в версии 2.2: Контекст приложения активен для подкоманд, а также для оформленного обратного вызова. Контекст приложения всегда доступен для обратных вызовов команд и параметров app.cli.

flask.cli.pass_script_info(f)

Маркирует функцию так, что экземпляр ScriptInfo передается в качестве первого аргумента обратному вызову щелчка.

Параметры:

f (F) –

Тип результата:

F

flask.cli.run_command = <Command run>

Запустите локальный сервер разработки.

Этот сервер предназначен только для целей разработки. Он не обеспечивает стабильность, безопасность или производительность производственных серверов WSGI.

Перезагрузчик и отладчик включены по умолчанию с помощью опции „–debug“.

Параметры:
  • args (Any) –

  • kwargs (Any) –

Тип результата:

Any

flask.cli.shell_command = <Command shell>

Запуск интерактивной оболочки Python в контексте данного приложения Flask. Приложение заполнит пространство имен по умолчанию этой оболочки в соответствии со своей конфигурацией.

Это полезно для выполнения небольших фрагментов управляющего кода без необходимости вручную настраивать приложение.

Параметры:
  • args (Any) –

  • kwargs (Any) –

Тип результата:

Any

Вернуться на верх