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
, который вызывает этот объект.
- add_template_filter(f, name=None)¶
Регистрация пользовательского фильтра шаблона. Работает точно так же, как декоратор
template_filter()
.
- add_template_global(f, name=None)¶
Регистрация глобальной функции пользовательского шаблона. Работает точно так же, как декоратор
template_global()
.Changelog
Добавлено в версии 0.10.
- add_template_test(f, name=None)¶
Регистрация пользовательского шаблона теста. Работает точно так же, как декоратор
template_test()
.Changelog
Добавлено в версии 0.10.
- 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
, то он используется по умолчанию, если параметр не передан.- Параметры:
rule (str) – Строка правила URL.
endpoint (Optional[str]) – Имя конечной точки, которое нужно связать с правилом и функцией представления. Используется при маршрутизации и построении URL. По умолчанию имеет значение
view_func.__name__
.view_func (Optional[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]]]]]) – Функция представления, которую нужно связать с именем конечной точки.
provide_automatic_options (Optional[bool]) – Добавьте метод
OPTIONS
и отвечайте на запросыOPTIONS
автоматически.options (Any) – Дополнительные параметры, передаваемые объекту
Rule
.
- Тип результата:
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.
- Тип результата:
- app_ctx_globals_class¶
alias of
_AppCtxGlobals
- async_to_sync(func)¶
Возвращает функцию синхронизации, которая будет выполнять функцию coroutine.
result = app.async_to_sync(func)(*args, **kwargs)
Переопределите этот метод, чтобы изменить способ преобразования асинхронного кода в синхронно вызываемый.
Changelog
Добавлено в версии 2.0.
- auto_find_instance_path()¶
Пытается найти путь к экземпляру, если он не был указан в конструкторе класса приложения. В основном вычисляется путь к папке с именем
instance
рядом с вашим главным файлом или пакетом.Changelog
Добавлено в версии 0.8.
- Тип результата:
- 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
. Он ведет себя точно так же, как обычный словарь, но поддерживает дополнительные методы для загрузки конфигурации из файлов.
- 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.
- Параметры:
- Тип результата:
- 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.
- 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(): ...
- ensure_sync(func)¶
Убедитесь, что функция является синхронной для рабочих WSGI. Простые функции
def
возвращаются как есть. Функцииasync def
оборачиваются для запуска и ожидания ответа.Переопределите этот метод, чтобы изменить способ выполнения асинхронных представлений в приложении.
Changelog
Добавлено в версии 2.0.
- 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
.
- extensions: dict¶
место, где расширения могут хранить специфическое состояние приложения. Например, здесь расширение может хранить движки баз данных и подобные вещи.
Ключ должен совпадать с именем модуля расширения. Например, в случае расширения «Flask-Foo» в flask_foo, ключ будет
'foo'
.Changelog
Добавлено в версии 0.7.
- full_dispatch_request()¶
Отправляет запрос и, кроме того, выполняет предварительную и последующую обработку запроса, а также перехват исключений HTTP и обработку ошибок.
Changelog
Добавлено в версии 0.7.
- Тип результата:
- 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.
- 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.
- 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
.
- 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.
- instance_path¶
Указывает путь к папке экземпляра.
Changelog
Добавлено в версии 0.8.
- iter_blueprints()¶
Итерация по всем чертежам в порядке их регистрации.
Changelog
Добавлено в версии 0.11.
- Тип результата:
- 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
, используется встроенная библиотека Pythonjson
. Другой провайдер может использовать другую библиотеку 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.
- Тип результата:
- make_config(instance_relative=False)¶
Используется для создания атрибута config конструктором Flask. Параметр instance_relative передается из конструктора Flask (там он называется instance_relative_config) и указывает, должен ли конфиг быть относительным к пути экземпляра или корневому пути приложения.
Changelog
Добавлено в версии 0.8.
- make_default_options_response()¶
Этот метод вызывается для создания ответа по умолчанию
OPTIONS
. Его можно изменить с помощью подклассов, чтобы изменить поведение ответов по умолчаниюOPTIONS
.Changelog
Добавлено в версии 0.7.
- Тип результата:
- 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
Объект возвращается без изменений. otherResponse
class Объект принуждается кresponse_class
.callable()
Функция вызывается как приложение WSGI. Результат используется для создания объекта ответа.- Тип результата:
Изменено в версии 2.2: Генератор будет преобразован в потоковый ответ. Список будет преобразован в ответ в формате JSON.
Changelog
Изменено в версии 1.1: Диктант будет преобразован в ответ в формате JSON.
Изменено в версии 0.9: Ранее кортеж интерпретировался как аргументы для объекта ответа.
- make_shell_context()¶
Возвращает контекст оболочки для интерактивной оболочки для данного приложения. При этом запускаются все зарегистрированные процессоры контекста оболочки.
Changelog
Добавлено в версии 0.11.
- Тип результата:
- property name: str¶
Имя приложения. Обычно это имя импорта с той разницей, что оно угадывается из файла запуска, если имя импорта - main. Это имя используется в качестве отображаемого имени, когда Flask требуется имя приложения. Его можно установить и переопределить, чтобы изменить значение.
Changelog
Добавлено в версии 0.8.
- open_instance_resource(resource, mode='rb')¶
Открывает ресурс из папки экземпляра приложения (
instance_path
). В остальном работает какopen_resource()
. Ресурсы экземпляра также могут быть открыты для записи.
- open_resource(resource, mode='rb')¶
Открыть для чтения файл ресурсов относительно
root_path
.Например, если файл
schema.sql
находится рядом с файломapp.py
, в котором определено приложениеFlask
, его можно открыть с помощью:with app.open_resource("schema.sql") as f: conn.executescript(f.read())
- patch(rule, **options)¶
Сокращение для
route()
сmethods=["PATCH"]
.Changelog
Добавлено в версии 2.0.
- permanent_session_lifetime¶
timedelta
, который используется для установки даты истечения срока действия постоянной сессии. По умолчанию это 31 день, что позволяет постоянной сессии существовать примерно один месяц.Этот атрибут также может быть настроен из конфигурации с помощью ключа конфигурации
PERMANENT_SESSION_LIFETIME
. По умолчанию установлено значениеtimedelta(days=31)
.
- 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
.- Тип результата:
- property propagate_exceptions: bool¶
Возвращает значение конфигурационного значения
PROPAGATE_EXCEPTIONS
в случае, если оно установлено, иначе возвращается разумное значение по умолчанию.Не рекомендуется, начиная с версии 2.2: Будет удалена в версии Flask 2.3.
Changelog
Добавлено в версии 0.7.
- redirect(location, code=302)¶
Создайте объект ответа перенаправления.
Она вызывается командой
flask.redirect()
, а также может быть вызвана напрямую.- Параметры:
- Тип результата:
Добавлено в версии 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.
- Параметры:
f (Callable[[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]]) –
- Тип результата:
None
- request_context(environ)¶
Создайте
RequestContext
, представляющий среду WSGI. Используйте блокwith
для толчка контекста, который заставитrequest
указывать на этот запрос.См. Контекст запроса.
Обычно не следует вызывать этот контекст из собственного кода. Контекст запроса автоматически подталкивается
wsgi_app()
при обработке запроса. Используйтеtest_request_context()
для создания среды и контекста вместо этого метода.- Параметры:
environ (dict) – среда WSGI
- Тип результата:
- root_path¶
Абсолютный путь к пакету в файловой системе. Используется для поиска ресурсов, содержащихся в пакете.
- route(rule, **options)¶
Украшает функцию представления, чтобы зарегистрировать ее с заданным правилом URL и опциями. Вызывает
add_url_rule()
, в котором есть более подробная информация о реализации.@app.route("/") def index(): return "Hello, World!"
См. Регистрация маршрутов URL.
Имя конечной точки маршрута по умолчанию соответствует имени функции представления, если не передан параметр
endpoint
.Параметр
methods
по умолчанию имеет значение["GET"]
.HEAD
иOPTIONS
добавляются автоматически.
- 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.
- 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.
- property session_cookie_name: str¶
Имя файла 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]) –
- Тип результата:
- 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]
- template_folder¶
Путь к папке templates, относительно
root_path
, для добавления в загрузчик шаблонов.None
, если шаблоны не должны добавляться.
- template_global(name=None)¶
Декоратор, который используется для регистрации глобальной функции пользовательского шаблона. Вы можете указать имя глобальной функции, в противном случае будет использовано имя функции. Пример:
@app.template_global() def double(n): return 2 * n
Changelog
Добавлено в версии 0.10.
- 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.
- 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) –
- Тип результата:
- 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
для клиента.- Параметры:
- Тип результата:
- 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
.
- Тип результата:
- 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.
- 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
.
- Тип результата:
Добавлено в версии 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_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 для контекстов запроса и приложения вызываются, даже если произошла необработанная ошибка. Другие события могут не вызываться в зависимости от того, когда произошла ошибка во время диспетчеризации. См. Обратные вызовы и ошибки.
Объекты чертежа¶
- 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
. В некоторых ситуациях это автоматическое определение может не сработать, поэтому путь можно указать вручную.
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()
.
- add_app_template_global(f, name=None)¶
Регистрирует глобальный шаблон, доступный в любом шаблоне, отображаемом приложением. Работает аналогично декоратору
app_template_global()
. ЭквивалентенFlask.add_template_global()
.Changelog
Добавлено в версии 0.10.
- add_app_template_test(f, name=None)¶
Регистрация теста шаблона, доступного в любом шаблоне, отображаемом приложением. Работает аналогично декоратору
app_template_test()
. ЭквивалентенFlask.add_template_test()
.Changelog
Добавлено в версии 0.10.
- add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, **options)¶
Зарегистрируйте правило URL в чертеже. Смотрите
Flask.add_url_rule()
для получения полной документации.Правило URL имеет префикс URL чертежа. Имя конечной точки, используемое с
url_for()
, имеет префикс имени чертежа.- Параметры:
rule (str) –
view_func (Optional[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]]]]]) –
options (Any) –
- Тип результата:
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()
.
- app_template_filter(name=None)¶
Регистрация фильтра шаблона, доступного в любом шаблоне, отображаемом приложением. Эквивалентно
Flask.template_filter()
.
- app_template_global(name=None)¶
Регистрация глобального шаблона, доступного в любом шаблоне, отображаемом приложением. Эквивалентно
Flask.template_global()
.Changelog
Добавлено в версии 0.10.
- app_template_test(name=None)¶
Регистрация теста шаблона, доступного в любом шаблоне, отображаемом приложением. Эквивалентно
Flask.template_test()
.Changelog
Добавлено в версии 0.10.
- 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.
- endpoint(endpoint)¶
Украсьте функцию представления, чтобы зарегистрировать ее для заданной конечной точки. Используется, если правило добавляется без
view_func
сadd_url_rule()
.app.add_url_rule("/ex", endpoint="example") @app.endpoint("example") def example(): ...
- 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
.
- 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.
- 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()
, который впоследствии передается функциям обратного вызова регистра. Подклассы могут переопределить эту функцию, чтобы вернуть подкласс состояния настройки.- Параметры:
- Тип результата:
- open_resource(resource, mode='rb')¶
Открыть для чтения файл ресурсов относительно
root_path
.Например, если файл
schema.sql
находится рядом с файломapp.py
, в котором определено приложениеFlask
, его можно открыть с помощью:with app.open_resource("schema.sql") as f: conn.executescript(f.read())
- patch(rule, **options)¶
Сокращение для
route()
сmethods=["PATCH"]
.Changelog
Добавлено в версии 2.0.
- 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.
- register_error_handler(code_or_exception, f)¶
Альтернативная функция присоединения ошибки к декоратору
errorhandler()
, более простая для использования без декоратора.Changelog
Добавлено в версии 0.7.
- Параметры:
f (Callable[[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]]) –
- Тип результата:
None
- root_path¶
Абсолютный путь к пакету в файловой системе. Используется для поиска ресурсов, содержащихся в пакете.
- route(rule, **options)¶
Украшает функцию представления, чтобы зарегистрировать ее с заданным правилом URL и опциями. Вызывает
add_url_rule()
, в котором есть более подробная информация о реализации.@app.route("/") def index(): return "Hello, World!"
См. Регистрация маршрутов URL.
Имя конечной точки маршрута по умолчанию соответствует имени функции представления, если не передан параметр
endpoint
.Параметр
methods
по умолчанию имеет значение["GET"]
.HEAD
иOPTIONS
добавляются автоматически.
- send_static_file(filename)¶
Функция представления, используемая для обслуживания файлов из
static_folder
. Маршрут автоматически регистрируется для этого представления вstatic_url_path
, если заданоstatic_folder
.Changelog
Добавлено в версии 0.5.
- 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.- 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 автоматически перехватываются и преобразуются в ответы вместо отказа.
- property args: MultiDict[str, str]¶
Разобранные параметры URL (часть URL после знака вопроса).
По умолчанию из этой функции возвращается
ImmutableMultiDict
. Это можно изменить, установивparameter_storage_class
на другой тип. Это может быть необходимо, если порядок данных формы важен.
- property authorization: Optional[Authorization]¶
Объект Authorization в разобранном виде.
- 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
- это объект WerkzeugFileStorage
.В основном он ведет себя как стандартный объект 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.
- get_data(cache=True, as_text=False, parse_form_data=False)¶
Считывает буферизованные входящие данные от клиента в один байтовый объект. По умолчанию он кэшируется, но это поведение можно изменить, установив cache в False.
Обычно плохой идеей является вызов этого метода без предварительной проверки длины содержимого, так как клиент может отправить десятки мегабайт или больше, что вызовет проблемы с памятью на сервере.
Обратите внимание, что если данные формы уже были разобраны, этот метод ничего не вернет, так как разбор данных формы не кэширует данные, как это делает этот метод. Для неявного вызова функции разбора данных формы установите parse_form_data в True. После этого возвращаемое значение метода будет пустой строкой, если парсер формы обрабатывает данные. Обычно в этом нет необходимости, так как если все данные кэшируются (что делается по умолчанию), то парсер формы будет использовать кэшированные данные для разбора данных формы. Пожалуйста, не забывайте в любом случае проверять длину содержимого перед вызовом этого метода, чтобы не истощать память сервера.
Если as_text имеет значение True, возвращаемое значение будет представлять собой декодированную строку.
Changelog
Добавлено в версии 0.9.
- get_json(force=False, silent=False, cache=True)¶
Разобрать
data
как JSON.Если mimetype не указывает на JSON (application/json, см.
is_json
), или разбор не удался, вызываетсяon_json_loading_failed()
и его возвращаемое значение используется в качестве возвращаемого значения. По умолчанию это вызывает ошибку 400 Bad Request.- Параметры:
- Тип результата:
Changelog
Изменено в версии 2.1: Вызывает ошибку 400, если тип содержимого неверен.
- headers¶
Заголовки, полученные вместе с запросом.
- property host: str¶
Имя хоста, к которому был сделан запрос, включая порт, если он нестандартный. Проверяется с помощью
trusted_hosts
.
- property if_modified_since: Optional[datetime]¶
Разобранный заголовок If-Modified-Since как объект времени.
Changelog
Изменено в версии 2.0: Объект datetime учитывает временные зоны.
- property if_none_match: ETags¶
Объект, содержащий все etags в заголовке If-None-Match.
- Тип результата:
- 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 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.
- Тип результата:
- 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
.- Тип результата:
- origin¶
Хост, с которого был отправлен запрос. Установите
access_control_allow_origin
в ответе, чтобы указать, какие хосты разрешены.
- parameter_storage_class¶
alias of
ImmutableMultiDict
- property pragma: HeaderSet¶
Поле Pragma general-header используется для включения специфических для реализации директив, которые могут применяться к любому получателю по цепочке запрос/ответ. Все директивы pragma определяют необязательное поведение с точки зрения протокола; однако некоторые системы МОГУТ потребовать, чтобы поведение соответствовало директивам.
- query_string¶
Часть URL после символа «?». Это необработанное значение, для разобранных значений используйте
args
.
- property range: Optional[Range]¶
Разобранный заголовок Range.
Changelog
Добавлено в версии 0.7.
- Тип результата:
- referrer¶
Поле заголовка запроса Referer позволяет клиенту указать для пользы сервера адрес (URI) ресурса, с которого был получен Request-URI («referrer», хотя поле заголовка написано неправильно).
- remote_addr¶
Адрес клиента, отправляющего запрос.
- remote_user¶
Если сервер поддерживает аутентификацию пользователя, и сценарий защищен, этот атрибут содержит имя пользователя, под которым он прошел аутентификацию.
- property root_url: str¶
Схема URL-адреса запроса, хост и корневой путь. Это корень, из которого осуществляется доступ к приложению.
- routing_exception: Optional[Exception] = None¶
Если совпадение URL не удалось, это исключение, которое будет вызвано / было вызвано в процессе обработки запроса. Обычно это исключение
NotFound
или что-то подобное.
- scheme¶
Схема URL протокола, который использовал запрос, например
https
илиwss
.
- 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
(атрибут исключения WerkzeugMethodNotAllowed
), поскольку запрос никогда не был внутренне связан.Changelog
Добавлено в версии 0.6.
- property user_agent: UserAgent¶
Агент пользователя. Используйте
user_agent.string
для получения значения заголовка. Установитеuser_agent_class
в подклассUserAgent
для обеспечения разбора других свойств или других расширенных данных.Changelog
Изменено в версии 2.0: Встроенный парсер устарел и будет удален в Werkzeug 2.1. Для разбора данных из строки должен быть установлен подкласс
UserAgent
.
- property values: CombinedMultiDict[str, str]¶
werkzeug.datastructures.CombinedMultiDict
, который объединяетargs
иform
.Для GET-запросов присутствуют только
args
, но неform
.Changelog
Изменено в версии 2.0: Для GET-запросов присутствуют только
args
, но неform
.
- 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 может быть недоступен в некоторых средах.
- 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 в противном случае.
- call_on_close(func)¶
Добавляет функцию во внутренний список функций, которые должны быть вызваны в процессе закрытия ответа. Начиная с версии 0.7 эта функция также возвращает переданную функцию, так что ее можно использовать в качестве декоратора.
Changelog
Добавлено в версии 0.6.
- 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_status = 200¶
статус по умолчанию, если он не указан.
- delete_cookie(key, path='/', domain=None, secure=False, httponly=False, samesite=None)¶
Удалить куки. Не работает, если ключ не существует.
- Параметры:
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)
Это особенно полезно, если вы хотите постобрабатывать ответы в главном диспетчере и использовать функциональность, предоставляемую вашим подклассом.
Имейте в виду, что это изменит объекты реагирования на месте, если это возможно!
- 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, что обеспечит буферизацию.
- get_app_iter(environ)¶
Возвращает итератор приложения для заданной среды. В зависимости от метода запроса и текущего кода состояния возвращаемым значением может быть пустой ответ, а не ответ из ответа.
Если метод запроса - HEAD или код состояния находится в диапазоне, где спецификация HTTP требует пустого ответа, возвращается пустая итерируемая таблица.
Changelog
Добавлено в версии 0.6.
- get_data(as_text=False)¶
Строковое представление тела ответа. При каждом вызове этого свойства итерабельность ответа кодируется и сглаживается. Это может привести к нежелательному поведению при потоковой передаче больших данных.
Это поведение можно отключить, установив
implicit_sequence_conversion
в False.Если as_text имеет значение True, возвращаемое значение будет представлять собой декодированную строку.
Changelog
Добавлено в версии 0.9.
- get_etag()¶
Возвращает кортеж в форме
(etag, is_weak)
. Если ETag отсутствует, возвращаемое значение будет(None, None)
.
- get_json(force=False, silent=False)¶
Разобрать
data
как JSON. Полезно при тестировании.Если mimetype не указывает на JSON (application/json, см.
is_json
), возвращаетсяNone
.В отличие от
Request.get_json()
, результат не кэшируется.
- get_wsgi_headers(environ)¶
Автоматически вызывается непосредственно перед запуском ответа и возвращает заголовки, измененные для данного окружения. Он возвращает копию заголовков из ответа с некоторыми изменениями, если это необходимо.
Например, заголовок location (если он присутствует) присоединяется к корневому URL среды. Также здесь длина содержимого автоматически устанавливается равной нулю для определенных кодов состояния.
Changelog
Изменено в версии 0.6: Ранее эта функция называлась fix_headers и изменяла объект ответа на месте. Также, начиная с версии 0.6, IRI в заголовках location и content-location обрабатываются правильно.
Также, начиная с версии 0.6, Werkzeug будет пытаться установить длину содержимого, если сможет определить ее самостоятельно. Это происходит, если все строки в итеративной таблице ответа уже закодированы и итеративная таблица буферизована.
- get_wsgi_response(environ)¶
Возвращает окончательный ответ WSGI в виде кортежа. Первый элемент в кортеже - итератор приложения, второй - статус, третий - список заголовков. Возвращаемый ответ создается специально для данной среды. Например, если метод запроса в среде WSGI -
'HEAD'
, то ответ будет пустым, в нем будут присутствовать только заголовки и код состояния.Changelog
Добавлено в версии 0.6.
- 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
.
- 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 не может быть разобран или удовлетворен.- Тип результата:
Changelog
Изменено в версии 2.0: Обработка диапазона пропускается, если длина равна 0, вместо того, чтобы выдать ошибку 416 Range Not Satisfiable.
- make_sequence()¶
Преобразует итератор ответа в список. По умолчанию это происходит автоматически, если требуется. Если implicit_sequence_conversion отключен, этот метод не будет вызываться автоматически, и некоторые свойства могут вызвать исключения. При этом также кодируются все элементы.
Changelog
Добавлено в версии 0.6.
- Тип результата:
None
- property max_cookie_size: int¶
Просмотр ключа конфигурации
MAX_COOKIE_SIZE
только для чтения.См.
max_cookie_size
в документации Werkzeug.
- 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 учитывает временные зоны.
- set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None)¶
Устанавливает файл 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.
- set_etag(etag, weak=False)¶
Установите etag и отмените старый, если он был.
- 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.
- get_cookie_domain(app)¶
Возвращает домен, который должен быть установлен для сессионного cookie.
Использует
SESSION_COOKIE_DOMAIN
, если он настроен, иначе возвращается к определению домена на основеSERVER_NAME
.После обнаружения (или если он вообще не установлен),
SESSION_COOKIE_DOMAIN
обновляется, чтобы избежать повторного выполнения логики.
- get_cookie_httponly(app)¶
Возвращает True, если сессионная cookie должна быть httponly. В настоящее время возвращается только значение переменной конфигурации
SESSION_COOKIE_HTTPONLY
.
- get_cookie_name(app)¶
Имя сессионного файла cookie. Используется``app.config[«SESSION_COOKIE_NAME»]``.
- get_cookie_path(app)¶
Возвращает путь, для которого cookie должен быть действительным. Реализация по умолчанию использует значение из конфигурационной переменной
SESSION_COOKIE_PATH
, если оно установлено, и возвращается кAPPLICATION_ROOT
или использует/
, если оноNone
.
- get_cookie_samesite(app)¶
Возвращает
'Strict'
или'Lax'
, если cookie должен использовать атрибутSameSite
. В настоящее время возвращается только значение параметраSESSION_COOKIE_SAMESITE
.
- get_cookie_secure(app)¶
Возвращает True, если cookie должен быть безопасным. В настоящее время возвращается значение параметра
SESSION_COOKIE_SECURE
.
- get_expiration_time(app, session)¶
Вспомогательный метод, который возвращает дату истечения срока действия сессии или
None
, если сессия связана с сессией браузера. Реализация по умолчанию возвращает сейчас + постоянное время жизни сессии, настроенное в приложении.- Параметры:
app (Flask) –
session (SessionMixin) –
- Тип результата:
- is_null_session(obj)¶
Проверяет, является ли данный объект нулевой сессией. Нулевые сессии не запрашиваются для сохранения.
По умолчанию проверяется, является ли объект экземпляром
null_session_class
.
- make_null_session(app)¶
Создает нулевой сеанс, который действует как объект замены, если поддержка реального сеанса не может быть загружена из-за ошибки конфигурации. Это в основном облегчает работу пользователя, поскольку задача нулевой сессии - по-прежнему поддерживать поиск без жалоб, а на модификации отвечать полезным сообщением об ошибке.
По умолчанию создается экземпляр
null_session_class
.- Параметры:
app (Flask) –
- Тип результата:
- null_session_class¶
make_null_session()
будет искать здесь класс, который должен быть создан при запросе нулевой сессии. Аналогично методis_null_session()
будет выполнять проверку типа по этому типу.alias of
NullSession
- open_session(app, request)¶
Эта функция вызывается в начале каждого запроса, после создания контекста запроса, перед сопоставлением URL.
Это должно вернуть объект, который реализует интерфейс, подобный словарю, а также интерфейс
SessionMixin
.Это вернет
None
, чтобы указать, что загрузка не удалась каким-то образом, что не является немедленной ошибкой. В этом случае контекст запроса вернется к использованиюmake_null_session()
.- Параметры:
- Тип результата:
- pickle_based = False¶
Флаг, указывающий, основан ли интерфейс сессии на pickle. Он может использоваться расширениями Flask для принятия решения о том, как работать с объектом сессии.
Changelog
Добавлено в версии 0.10.
- save_session(app, session, response)¶
Вызывается в конце каждого запроса, после генерации ответа, перед удалением контекста запроса. Он пропускается, если
is_null_session()
возвращаетTrue
.- Параметры:
app (Flask) –
session (SessionMixin) –
response (Response) –
- Тип результата:
None
- should_set_cookie(app, session)¶
Используется сессионными бэкендами для определения того, следует ли установить заголовок
Set-Cookie
для куки этой сессии для данного ответа. Если сессия была изменена, cookie устанавливается. Если сессия постоянна и конфигурацияSESSION_REFRESH_EACH_REQUEST
равна true, cookie устанавливается всегда.Эта проверка обычно пропускается, если сессия была удалена.
Changelog
Добавлено в версии 0.11.
- Параметры:
app (Flask) –
session (SessionMixin) –
- Тип результата:
- 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()
.- Параметры:
- Тип результата:
- salt = 'cookie-session'¶
соль, которая должна быть применена поверх секретного ключа для подписи сессий на основе cookie.
- save_session(app, session, response)¶
Вызывается в конце каждого запроса, после генерации ответа, перед удалением контекста запроса. Он пропускается, если
is_null_session()
возвращаетTrue
.- Параметры:
app (Flask) –
session (SessionMixin) –
response (Response) –
- Тип результата:
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)¶
Возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию.
- modified = False¶
Когда данные изменяются, это значение устанавливается в
True
. Отслеживается только сам словарь сессии; если сессия содержит изменяемые данные (например, вложенный dict), то это значение должно быть установлено вTrue
вручную при изменении этих данных. Куки сессии будут записаны в ответ, только если это значениеTrue
.
- class flask.sessions.NullSession(initial=None)¶
Класс используется для генерации более красивых сообщений об ошибках, если сессии недоступны. Он все еще разрешает доступ только для чтения к пустой сессии, но при установке выдает ошибку.
- Параметры:
initial (Any) –
- clear() None. Remove all items from D. ¶
- pop(k[, d]) v, remove specified key and return the corresponding value. ¶
Если ключ не найден, возвращает значение по умолчанию, если оно задано; в противном случае выдает ошибку KeyError.
- popitem(*args, **kwargs)¶
Удалить и вернуть пару (ключ, значение) в виде кортежа.
Пары возвращаются в порядке LIFO (последним пришел, первым ушел). Вызывает KeyError, если диктант пуст.
- setdefault(*args, **kwargs)¶
Вставка ключа со значением по умолчанию, если ключ отсутствует в словаре.
Возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию.
- 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]
- class flask.sessions.SessionMixin¶
Расширяет базовый словарь с атрибутами сессии.
- accessed = True¶
Некоторые реализации могут определять, когда данные сессии считываются или записываются, и устанавливать это значение, когда это происходит. В миксине по умолчанию жестко задано значение
True
.
- modified = True¶
Некоторые реализации могут обнаруживать изменения в сессии и устанавливать это значение, когда это происходит. В миксине по умолчанию жестко задано значение
True
.
Уведомление
Конфигурация 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.
- 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()
, которые передаются напрямую.- Параметры:
- Тип результата:
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.
Глобальные приложения¶
Для передачи данных, которые действительны только для одного запроса, от одной функции к другой глобальная переменная не подходит, поскольку она будет ломаться в многопоточных средах. 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()
.- Параметры:
- Тип результата:
Changelog
Добавлено в версии 0.10.
- pop(name, default=<object object>)¶
Получение и удаление атрибута по имени. Например,
dict.pop()
.- Параметры:
- Тип результата:
Changelog
Добавлено в версии 0.11.
- setdefault(name, default=None)¶
Получить значение атрибута, если он присутствует, в противном случае установить и вернуть значение по умолчанию. Например,
dict.setdefault()
.- Параметры:
- Тип результата:
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.
- Тип результата:
- 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.
- flask.has_app_context()¶
Работает как
has_request_context()
, но для контекста приложения. Вместо этого можно просто выполнить проверку булевой функции на объектеcurrent_app
.Changelog
Добавлено в версии 0.9.
- Тип результата:
- 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
.
- Тип результата:
Изменено в версии 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()
.- Параметры:
- Тип результата:
te.NoReturn
Добавлено в версии 2.2: Вызывает
current_app.aborter
, если доступно, вместо того, чтобы всегда использоватьabort
по умолчанию в Werkzeug.
- flask.redirect(location, code=302, Response=None)¶
Создайте объект ответа перенаправления.
Если доступен
current_app
, то будет использоваться его методredirect()
, в противном случае будет использоватьсяwerkzeug.utils.redirect()
.- Параметры:
- Тип результата:
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.
- 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.
- 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
, чтобы предпочесть условное кэширование.
- Тип результата:
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
.- Параметры:
- Тип результата:
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 <em>World</em>!')
Это реализует интерфейс
__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 & bar</em>') >>> Markup("<em>Hello</em> ") + "<foo>" Markup('<em>Hello</em> <foo>')
- classmethod escape(s)¶
Эскейп строки. Вызывает
escape()
и гарантирует, что для подклассов возвращается правильный тип.
- striptags()¶
unescape()
разметку, удалить теги и нормализовать пробельные символы до одинарных пробелов.>>> Markup("Main » <em>About</em>").striptags() 'Main » About'
- Тип результата:
Мигание сообщения¶
- 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: Добавлен параметр с_категориями.
Поддержка 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 для сериализации.
- Тип результата:
Изменено в версии 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) –
- Тип результата:
Изменено в версии 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()
.- Параметры:
- Тип результата:
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()
.- Параметры:
- Тип результата:
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.
- dump(obj, fp, **kwargs)¶
Сериализация данных в формате JSON и запись в файл.
- loads(s, **kwargs)¶
Десериализуйте данные в формате JSON.
- load(fp, **kwargs)¶
Десериализуйте данные в формате JSON, считанные из файла.
- response(*args, **kwargs)¶
Сериализует заданные аргументы как JSON и возвращает объект
Response
с миметипомapplication/json
.Функция
jsonify()
вызывает этот метод для текущего приложения.Можно указать либо позиционный аргумент, либо ключевое слово, но не оба. Если аргументы не указаны, сериализуется
None
.- Параметры:
args (t.Any) – Одно значение для сериализации или несколько значений для сериализации в виде списка.
kwargs (t.Any) – Рассматривается как dict для сериализации.
- Тип результата:
- 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
.
- 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()
.
- Тип результата:
- loads(s, **kwargs)¶
Десериализуйте данные в формате JSON из строки или байтов.
- Параметры:
kwargs (Any) – Передается в
json.loads()
.
- Тип результата:
- response(*args, **kwargs)¶
Сериализует заданные аргументы в виде JSON и возвращает с ними объект
Response
. Миметип ответа будет «application/json» и может быть изменен с помощьюmimetype
.Если
compact
равноFalse
или включен режим отладки, вывод будет отформатирован так, чтобы его было легче читать.Можно указать либо позиционный аргумент, либо ключевое слово, но не оба. Если аргументы не указаны, сериализуется
None
.- Параметры:
args (t.Any) – Одно значение для сериализации или несколько значений для сериализации в виде списка.
kwargs (t.Any) – Рассматривается как dict для сериализации.
- Тип результата:
- 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
, они обрабатываются перед этим методом.
- 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.
- loads(value)¶
Загрузка данных из строки JSON и десериализация всех помеченных объектов.
- register(tag_class, force=False, index=None)¶
Зарегистрируйте новый тег в этом сериализаторе.
- Параметры:
tag_class (Type[JSONTag]) – класс тега для регистрации. Будет инстанцирован с этим экземпляром сериализатора.
force (bool) – перезаписать существующий тег. Если false (по умолчанию), то выдается предупреждение
KeyError
.index (Optional[int]) – индекс для вставки нового тега в порядок тегов. Полезно, когда новый тег является частным случаем существующего. Если
None
(по умолчанию), тег добавляется в конец порядка.
- Исключение:
KeyError – если ключ тега уже зарегистрирован и
force
не является истиной.- Тип результата:
None
- tag(value)¶
При необходимости преобразуйте значение в маркированное представление.
- class flask.json.tag.JSONTag(serializer)¶
B
- Параметры:
serializer (TaggedJSONSerializer) –
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)¶
Рендеринг шаблона по имени с заданным контекстом.
- flask.render_template_string(source, **context)¶
Вернуть шаблон из заданной исходной строки с заданным контекстом.
- flask.stream_template(template_name_or_list, **context)¶
Рендеринг шаблона по имени с заданным контекстом в виде потока. Возвращается итератор строк, который можно использовать как потоковый ответ от представления.
- Параметры:
- Тип результата:
Добавлено в версии 2.2.
- flask.stream_template_string(source, **context)¶
Рендеринг шаблона из заданной исходной строки с заданным контекстом в виде потока. Возвращается итератор строк, который может быть использован в качестве потокового ответа представления.
- Параметры:
- Тип результата:
Добавлено в версии 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.
Конфигурация¶
- 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.
- Параметры:
- from_envvar(variable_name, silent=False)¶
Загружает конфигурацию из переменной окружения, указывающей на файл конфигурации. По сути, это просто сокращение с более приятными сообщениями об ошибках для этой строки кода:
app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])
- 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]
whereReader
implements aread
method.) – Вызываемая программа, которая принимает хэндл файла и возвращает отображение загруженных данных из файла.silent (bool) – Игнорируйте файл, если он не существует.
- Результат:
True
если файл был загружен успешно.- Тип результата:
Changelog
Добавлено в версии 2.0.
- from_mapping(mapping=None, **kwargs)¶
Обновляет конфигурацию типа
update()
, игнорируя элементы с неверхними ключами.- Результат:
Всегда возвращает
True
.- Параметры:
- Тип результата:
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()
.
- from_prefixed_env(prefix='FLASK', *, loads=<function loads>)¶
Загружает все переменные окружения, которые начинаются с
FLASK_
, отбрасывая префикс из ключа env для ключа config. Значения передаются через функцию загрузки, чтобы попытаться преобразовать их в более конкретные типы, чем строки.Клавиши загружаются в порядке
sorted()
.Функция загрузки по умолчанию пытается разобрать значения как любой допустимый тип JSON, включая dicts и списки.
Конкретные элементы во вложенных диктах могут быть установлены путем разделения ключей двойным подчеркиванием (
__
). Если промежуточный ключ не существует, он будет инициализирован пустым диктом.- Параметры:
prefix (str) – Загрузите переменные env, начинающиеся с этого префикса, разделенные знаком подчеркивания (
_
).loads (Callable[[str], Any]) – Передайте каждое строковое значение в эту функцию и используйте возвращаемое значение в качестве значения конфигурации. Если возникает какая-либо ошибка, она игнорируется, и значение остается строкой. По умолчанию используется значение
json.loads()
.
- Тип результата:
Changelog
Добавлено в версии 2.1.
- from_pyfile(filename, silent=False)¶
Обновляет значения в конфиге из файла Python. Эта функция ведет себя так, как если бы файл был импортирован как модуль с помощью функции
from_object()
.- Параметры:
- Результат:
True
если файл был загружен успешно.- Тип результата:
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' }
Это часто бывает полезно, когда параметры конфигурации отображаются непосредственно на аргументы ключевых слов в функциях или конструкторах классов.
- Параметры:
- Тип результата:
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.
Полезные внутренние компоненты¶
- 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.
- Тип результата:
- 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)¶
Вспомогательный метод для регистрации правила (и, по желанию, функции представления) в приложении. Конечная точка автоматически получает префикс с именем чертежа.
- 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
.- Параметры:
- Тип результата:
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
.
- 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¶
Как правило, существует три способа определения правил для системы маршрутизации:
Вы можете использовать декоратор
flask.Flask.route()
.Вы можете использовать функцию
flask.Flask.add_url_rule()
.Вы можете получить прямой доступ к базовой системе маршрутизации 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 был уникальным, поэтому применяются следующие правила:
Если правило заканчивается косой чертой и запрашивается пользователем без косой черты, пользователь автоматически перенаправляется на ту же страницу с добавлением косой черты.
Если правило не заканчивается косой чертой, а пользователь запрашивает страницу с косой чертой, выдается сообщение 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 |
функция для вызова при обслуживании запроса к указанной конечной точке. Если функция не указана, ее можно задать позже, сохранив в словаре |
умолчания |
Словарь с параметрами по умолчанию для этого правила. О том, как работают значения по умолчанию, см. пример выше. |
subdomain |
определяет правило для субдомена в случае, если используется согласование субдоменов. Если не указано, то принимается поддомен по умолчанию. |
**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) – дополнительные аргументы ключевых слов, передаваемые в конструктор контекста.
- Тип результата:
Изменено в версии 8.0: Добавлен атрибут
context_class
.
- 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¶
Опционально путь импорта для приложения Flask.
- create_app¶
Опционально функция, которой передается информация скрипта для создания экземпляра приложения.
- data: t.Dict[t.Any, t.Any]¶
Словарь с произвольными данными, которые могут быть связаны с этой информацией скрипта.
- flask.cli.load_dotenv(path=None)¶
Загрузите файлы «dotenv» в порядке старшинства для установки переменных окружения.
Если переменная env var уже установлена, она не перезаписывается, поэтому более ранние файлы в списке предпочтительнее более поздних.
Это не работает, если python-dotenv не установлен.
- Параметры:
path (Optional[Union[str, PathLike]]) – Загрузите файл в этом месте вместо поиска.
- Результат:
True
если файл был загружен.- Тип результата:
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“.
- flask.cli.shell_command = <Command shell>¶
Запуск интерактивной оболочки Python в контексте данного приложения Flask. Приложение заполнит пространство имен по умолчанию этой оболочки в соответствии со своей конфигурацией.
Это полезно для выполнения небольших фрагментов управляющего кода без необходимости вручную настраивать приложение.