- en
- Language: ru
- Documentation version: 1.1.x
API¶
Эта часть документации охватывает все интерфейсы Flask. Для частей, где Flask зависит от внешних библиотек, мы документируем наиболее важные прямо здесь и даем ссылки на каноническую документацию.
Объект приложения¶
- class flask.Flask(import_name: str, static_url_path: Optional[str] = None, static_folder: Optional[Union[str, os.PathLike]] = 'static', static_host: Optional[str] = None, host_matching: bool = False, subdomain_matching: bool = False, template_folder: Optional[str] = 'templates', instance_path: Optional[str] = None, instance_relative_config: bool = False, root_path: Optional[str] = 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).
Добавлено в версии 0.7: Добавлены параметры static_url_path, static_folder и template_folder.
Добавлено в версии 0.8: Добавлены параметры instance_path и instance_relative_config.
Добавлено в версии 0.11: Добавлен параметр root_path.
Добавлено в версии 1.0: Были добавлены параметры
host_matching
иstatic_host
.Добавлено в версии 1.0: Добавлен параметр
subdomain_matching
. Теперь сопоставление субдоменов необходимо включать вручную. УстановкаSERVER_NAME
не включает его неявно.- Параметры
import_name – имя пакета приложений
static_url_path – можно использовать для указания другого пути для статических файлов в сети. По умолчанию используется имя папки static_folder.
static_folder – Папка со статическими файлами, которая обслуживается по адресу
static_url_path
. Относительный к приложениюroot_path
или абсолютный путь. По умолчанию'static'
.static_host – хост, который будет использоваться при добавлении статического маршрута. По умолчанию установлено значение None. Требуется при использовании
host_matching=True
с настроеннымstatic_folder
.host_matching – установить атрибут
url_map.host_matching
. По умолчанию имеет значение False.subdomain_matching – учитывать поддомен относительно
SERVER_NAME
при подборе маршрутов. По умолчанию имеет значение False.template_folder – папка, содержащая шаблоны, которые должны использоваться приложением. По умолчанию это папка
'templates'
в корневом пути приложения.instance_path – Альтернативный путь к экземпляру приложения. По умолчанию за путь к экземпляру принимается папка
'instance'
рядом с пакетом или модулем.instance_relative_config – если установлено значение
True
относительные имена файлов для загрузки конфигурации считаются относительными к пути экземпляра, а не к корню приложения.root_path – The path to the root of the application files. This should only be set manually when it can’t be detected automatically, such as for namespace packages.
- add_template_filter(f: Callable[[...], Any], name: Optional[str] = None) None ¶
Регистрация пользовательского фильтра шаблона. Работает точно так же, как декоратор
template_filter()
.- Параметры
name – необязательное имя фильтра, иначе будет использовано имя функции.
- add_template_global(f: Callable[[...], Any], name: Optional[str] = None) None ¶
Регистрация глобальной функции пользовательского шаблона. Работает точно так же, как декоратор
template_global()
.Добавлено в версии 0.10.
- Параметры
name – необязательное имя глобальной функции, иначе будет использовано имя функции.
- add_template_test(f: Callable[[...], bool], name: Optional[str] = None) None ¶
Регистрация пользовательского шаблона теста. Работает точно так же, как декоратор
template_test()
.Добавлено в версии 0.10.
- Параметры
name – необязательное имя теста, иначе будет использовано имя функции.
- add_url_rule(rule: str, endpoint: Optional[str] = None, view_func: Optional[Callable] = None, provide_automatic_options: Optional[bool] = None, **options: Any) None ¶
Register a rule for routing incoming requests and building URLs. The
route()
decorator is a shortcut to call this with theview_func
argument. These are equivalent:@app.route("/") def index(): ...
def index(): ... app.add_url_rule("/", view_func=index)
See Регистрация маршрутов URL.
The endpoint name for the route defaults to the name of the view function if the
endpoint
parameter isn’t passed. An error will be raised if a function has already been registered for the endpoint.The
methods
parameter defaults to["GET"]
.HEAD
is always added automatically, andOPTIONS
is added automatically by default.view_func
does not necessarily need to be passed, but if the rule should participate in routing an endpoint name must be associated with a view function at some point with theendpoint()
decorator.app.add_url_rule("/", endpoint="index") @app.endpoint("index") def index(): ...
If
view_func
has arequired_methods
attribute, those methods are added to the passed and automatic methods. If it has aprovide_automatic_methods
attribute, it is used as the default if the parameter is not passed.- Параметры
rule – The URL rule string.
endpoint – The endpoint name to associate with the rule and view function. Used when routing and building URLs. Defaults to
view_func.__name__
.view_func – The view function to associate with the endpoint name.
provide_automatic_options – Add the
OPTIONS
method and respond toOPTIONS
requests automatically.options – Extra options passed to the
Rule
object.
- after_request(f: Callable[[Response], Response]) Callable[[Response], Response] ¶
Register a function to run after each request to this object.
The function is called with the response object, and must return a response object. This allows the functions to modify or replace the response before it is sent.
If a function raises an exception, any remaining
after_request
functions will not be called. Therefore, this should not be used for actions that must execute, such as to close resources. Useteardown_request()
for that.
- after_request_funcs: t.Dict[AppOrBlueprintKey, t.List[AfterRequestCallable]]¶
A data structure of functions to call at the end of each request, in the format
{scope: [functions]}
. Thescope
key is the name of a blueprint the functions are active for, orNone
for all requests.To register a function, use the
after_request()
decorator.This data structure is internal. It should not be modified directly and its format may change at any time.
- app_context() flask.ctx.AppContext ¶
Создайте
AppContext
. Используйте в качестве блокаwith
, чтобы подтолкнуть контекст, который заставитcurrent_app
указывать на это приложение.Контекст приложения автоматически подталкивается
RequestContext.push()
при обработке запроса и при выполнении команды CLI. Используйте этот параметр для ручного создания контекста вне этих ситуаций.with app.app_context(): init_db()
См. Контекст приложения.
Добавлено в версии 0.9.
- app_ctx_globals_class¶
alias of
flask.ctx._AppCtxGlobals
- async_to_sync(func: Callable[[...], Coroutine]) Callable[[...], Any] ¶
Return a sync function that will run the coroutine function.
result = app.async_to_sync(func)(*args, **kwargs)
Override this method to change how the app converts async code to be synchronously callable.
Добавлено в версии 2.0.
- auto_find_instance_path() str ¶
Пытается найти путь к экземпляру, если он не был указан в конструкторе класса приложения. В основном вычисляется путь к папке с именем
instance
рядом с вашим главным файлом или пакетом.Добавлено в версии 0.8.
- before_first_request(f: Callable[[], None]) Callable[[], None] ¶
Регистрирует функцию для запуска перед первым запросом к данному экземпляру приложения.
Функция будет вызвана без аргументов, а ее возвращаемое значение будет проигнорировано.
Добавлено в версии 0.8.
- before_first_request_funcs: t.List[BeforeFirstRequestCallable]¶
Список функций, которые будут вызываться в начале первого запроса к данному экземпляру. Чтобы зарегистрировать функцию, используйте декоратор
before_first_request()
.Добавлено в версии 0.8.
- before_request(f: Callable[[], Optional[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]]]) Callable[[], Optional[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]]] ¶
Register a function to run before each request.
Например, это может использоваться для открытия соединения с базой данных или для загрузки вошедшего в систему пользователя из сессии.
@app.before_request def load_user(): if "user_id" in session: g.user = db.session.get(session["user_id"])
The function will be called without any arguments. If it returns a non-
None
value, the value is handled as if it was the return value from the view, and further request handling is stopped.
- before_request_funcs: t.Dict[AppOrBlueprintKey, t.List[BeforeRequestCallable]]¶
A data structure of functions to call at the beginning of each request, in the format
{scope: [functions]}
. Thescope
key is the name of a blueprint the functions are active for, orNone
for all requests.To register a function, use the
before_request()
decorator.This data structure is internal. It should not be modified directly and its format may change at any time.
- blueprints: t.Dict[str, 'Blueprint']¶
Maps registered blueprint names to blueprint objects. The dict retains the order the blueprints were registered in. Blueprints can be registered multiple times, this dict does not track how often they were attached.
Добавлено в версии 0.7.
- cli¶
The Click command group for registering CLI commands for this object. The commands are available from the
flask
command once the application has been discovered and blueprints have been registered.
- config¶
Словарь конфигурации в виде
Config
. Он ведет себя точно так же, как обычный словарь, но поддерживает дополнительные методы для загрузки конфигурации из файлов.
- config_class¶
alias of
flask.config.Config
- context_processor(f: Callable[[], Dict[str, Any]]) Callable[[], Dict[str, Any]] ¶
Регистрирует функцию контекстного процессора шаблона.
- create_global_jinja_loader() flask.templating.DispatchingJinjaLoader ¶
Создает загрузчик для среды Jinja2. Может быть использована для переопределения только загрузчика, а остальные функции остаются неизменными. Не рекомендуется переопределять эту функцию. Вместо этого следует переопределить функцию
jinja_loader()
.Глобальный загрузчик осуществляет диспетчеризацию между загрузчиками приложения и отдельных чертежей.
Добавлено в версии 0.7.
- create_jinja_environment() flask.templating.Environment ¶
Создайте окружение Jinja на основе
jinja_options
и различных методов приложения, связанных с Jinja. Изменениеjinja_options
после этого не будет иметь никакого эффекта. Также добавляет в окружение связанные с Flask глобальные файлы и фильтры.Изменено в версии 0.11:
Environment.auto_reload
устанавливается в соответствии с параметром конфигурацииTEMPLATES_AUTO_RELOAD
.Добавлено в версии 0.5.
- create_url_adapter(request: Optional[flask.wrappers.Request]) Optional[werkzeug.routing.MapAdapter] ¶
Создает адаптер URL для заданного запроса. URL-адаптер создается в тот момент, когда контекст запроса еще не установлен, поэтому запрос передается в явном виде.
Добавлено в версии 0.6.
Изменено в версии 0.9: Теперь его можно вызывать и без объекта запроса, когда URL-адаптер создается для контекста приложения.
Изменено в версии 1.0:
SERVER_NAME
больше не включает неявное сопоставление поддоменов. Вместо этого используйтеsubdomain_matching
.
- property debug: bool¶
Включен ли режим отладки. При использовании
flask run
для запуска сервера разработки, интерактивный отладчик будет показан для необработанных исключений, и сервер будет перезагружен при изменении кода. Это соответствует ключу конфигурацииDEBUG
. Она включается, когдаenv
имеет значение'development'
и переопределяется переменной окруженияFLASK_DEBUG
. Она может вести себя не так, как ожидается, если установлена в коде.Не включайте режим отладки при развертывании в производстве..
По умолчанию:
True
, еслиenv
равно'development'
, илиFalse
в противном случае.
- default_config = {'APPLICATION_ROOT': '/', 'DEBUG': None, 'ENV': None, 'EXPLAIN_TEMPLATE_LOADING': False, 'JSONIFY_MIMETYPE': 'application/json', 'JSONIFY_PRETTYPRINT_REGULAR': False, 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'MAX_CONTENT_LENGTH': None, 'MAX_COOKIE_SIZE': 4093, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 'PREFERRED_URL_SCHEME': 'http', 'PRESERVE_CONTEXT_ON_EXCEPTION': None, '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: str, **options: Any) Callable[[flask.scaffold.F], flask.scaffold.F] ¶
Shortcut for
route()
withmethods=["DELETE"]
.Добавлено в версии 2.0.
- dispatch_request() Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication] ¶
Выполняет диспетчеризацию запроса. Сопоставляет URL и возвращает возвращаемое значение представления или обработчика ошибок. Это не обязательно должен быть объект ответа. Чтобы преобразовать возвращаемое значение в соответствующий объект ответа, вызовите
make_response()
.Изменено в версии 0.7: Здесь больше не выполняется обработка исключений, этот код был перенесен в новый
full_dispatch_request()
.
- do_teardown_appcontext(exc: typing.Optional[BaseException] = <object object>) None ¶
Вызывается непосредственно перед разворачиванием контекста приложения.
При обработке запроса контекст приложения открывается после контекста запроса. См.
do_teardown_request()
.При этом вызываются все функции, украшенные
teardown_appcontext()
. Затем посылается сигналappcontext_tearing_down
.Это вызывается командой
AppContext.pop()
.Добавлено в версии 0.9.
- do_teardown_request(exc: typing.Optional[BaseException] = <object object>) None ¶
Вызывается после диспетчеризации запроса и возврата ответа, непосредственно перед тем, как контекст запроса будет выгружен.
При этом вызываются все функции, украшенные символом
teardown_request()
, иBlueprint.teardown_request()
, если запрос обработал блюпринт. Наконец, посылается сигналrequest_tearing_down
.T
- Параметры
exc – Необработанное исключение, возникшее при диспетчеризации запроса. Определяется из текущей информации об исключении, если она не передана. Передается каждой функции завершения работы.
Изменено в версии 0.9: Добавлен аргумент
exc
.
- endpoint(endpoint: str) Callable ¶
Decorate a view function to register it for the given endpoint. Used if a rule is added without a
view_func
withadd_url_rule()
.app.add_url_rule("/ex", endpoint="example") @app.endpoint("example") def example(): ...
- Параметры
endpoint – The endpoint name to associate with the view function.
- ensure_sync(func: Callable) Callable ¶
Ensure that the function is synchronous for WSGI workers. Plain
def
functions are returned as-is.async def
functions are wrapped to run and wait for the response.Override this method to change how the app runs async views.
Добавлено в версии 2.0.
- env¶
В какой среде работает приложение. Flask и расширения могут включать поведение, основанное на окружении, например, включать режим отладки. Это связано с ключом конфигурации
ENV
. Он задается переменной окруженияFLASK_ENV
и может вести себя не так, как ожидается, если задан в коде.Не включайте разработку при развертывании в производстве..
По умолчанию:
'production'
- error_handler_spec: t.Dict[AppOrBlueprintKey, t.Dict[t.Optional[int], t.Dict[t.Type[Exception], 'ErrorHandlerCallable']]]¶
A data structure of registered error handlers, in the format
{scope: {code: {class: handler}}}`
. Thescope
key is the name of a blueprint the handlers are active for, orNone
for all requests. Thecode
key is the HTTP status code forHTTPException
, orNone
for other exceptions. The innermost dictionary maps exception classes to handler functions.Чтобы зарегистрировать обработчик ошибок, используйте декоратор
errorhandler()
.This data structure is internal. It should not be modified directly and its format may change at any time.
- errorhandler(code_or_exception: Union[Type[Exception], int]) Callable[[ErrorHandlerCallable], ErrorHandlerCallable] ¶
Зарегистрируйте функцию для обработки ошибок по коду или классу исключений.
Декоратор, который используется для регистрации функции с кодом ошибки. Пример:
@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
Добавлено в версии 0.7: Используйте
register_error_handler()
вместо модификацииerror_handler_spec
напрямую, для обработчиков ошибок для всего приложения.Добавлено в версии 0.7: Теперь можно дополнительно регистрировать пользовательские типы исключений, которые не обязательно должны быть подклассом класса
HTTPException
.- Параметры
code_or_exception – код как целое число для обработчика, или произвольное исключение
- extensions: dict¶
a place where extensions can store application specific state. For example this is where an extension could store database engines and similar things.
Ключ должен совпадать с именем модуля расширения. Например, в случае расширения «Flask-Foo» в flask_foo, ключ будет
'foo'
.Добавлено в версии 0.7.
- full_dispatch_request() flask.wrappers.Response ¶
Отправляет запрос и, кроме того, выполняет предварительную и последующую обработку запроса, а также перехват исключений HTTP и обработку ошибок.
Добавлено в версии 0.7.
- get(rule: str, **options: Any) Callable[[flask.scaffold.F], flask.scaffold.F] ¶
Shortcut for
route()
withmethods=["GET"]
.Добавлено в версии 2.0.
- get_send_file_max_age(filename: Optional[str]) Optional[int] ¶
Used by
send_file()
to determine themax_age
cache value for a given file path if it wasn’t passed.By default, this returns
SEND_FILE_MAX_AGE_DEFAULT
from the configuration ofcurrent_app
. This defaults toNone
, which tells the browser to use conditional requests instead of a timed cache, which is usually preferable.Изменено в версии 2.0: The default configuration is
None
instead of 12 hours.Добавлено в версии 0.9.
- property got_first_request: bool¶
Этот атрибут имеет значение
True
, если приложение начало обрабатывать первый запрос.Добавлено в версии 0.8.
- handle_exception(e: Exception) flask.wrappers.Response ¶
Обработать исключение, которое не имеет обработчика ошибок, связанного с ним, или которое было вызвано из обработчика ошибок. Это всегда вызывает ошибку 500
InternalServerError
.Всегда посылает сигнал
got_request_exception
.Если
propagate_exceptions
равноTrue
, например, в режиме отладки, ошибка будет повторно вызвана, чтобы отладчик мог ее отобразить. В противном случае исходное исключение регистрируется, и возвращаетсяInternalServerError
.Если обработчик ошибок зарегистрирован для
InternalServerError
или500
, он будет использоваться. Для согласованности обработчик всегда будет получатьInternalServerError
. Исходное необработанное исключение доступно какe.original_exception
.Изменено в версии 1.1.0: Всегда передает обработчику экземпляр
InternalServerError
, устанавливаяoriginal_exception
на необработанную ошибку.Изменено в версии 1.1.0:
after_request
функции и другая финализация выполняется даже для ответа 500 по умолчанию, когда обработчик отсутствует.Добавлено в версии 0.3.
- handle_http_exception(e: werkzeug.exceptions.HTTPException) Union[werkzeug.exceptions.HTTPException, Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication] ¶
Обрабатывает исключение HTTP. По умолчанию вызываются зарегистрированные обработчики ошибок и возвращается исключение в качестве ответа.
Изменено в версии 1.0.3:
RoutingException
, используемый внутренне для таких действий, как перенаправление косой черты при маршрутизации, не передается обработчикам ошибок.Изменено в версии 1.0: Exceptions are looked up by code and by MRO, so
HTTPException
subclasses can be handled with a catch-all handler for the baseHTTPException
.Добавлено в версии 0.3.
- handle_url_build_error(error: Exception, endpoint: str, values: dict) str ¶
Обращение
BuildError
кurl_for()
.
- handle_user_exception(e: Exception) Union[werkzeug.exceptions.HTTPException, Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication] ¶
Этот метод вызывается всякий раз, когда возникает исключение, которое необходимо обработать. Особым случаем является
HTTPException
, которое передается методуhandle_http_exception()
. Эта функция либо вернет значение ответа, либо повторно вызовет исключение с тем же возвратом.Изменено в версии 1.0: Ошибки ключа, вызванные данными запроса типа
form
, показывают плохой ключ в режиме отладки, а не общее сообщение о плохом запросе.Добавлено в версии 0.7.
- property has_static_folder: bool¶
True
ifstatic_folder
is set.Добавлено в версии 0.5.
- import_name¶
The name of the package or module that this object belongs to. Do not change this once it is set by the constructor.
- inject_url_defaults(endpoint: str, values: dict) None ¶
Вставляет значения URL по умолчанию для данной конечной точки непосредственно в переданный словарь значений. Это используется внутри и автоматически вызывается при построении URL.
Добавлено в версии 0.7.
- instance_path¶
Указывает путь к папке экземпляра.
Добавлено в версии 0.8.
- iter_blueprints() ValuesView[Blueprint] ¶
Итерация по всем чертежам в порядке их регистрации.
Добавлено в версии 0.11.
- property jinja_env: flask.templating.Environment¶
Среда Jinja, используемая для загрузки шаблонов.
Среда создается при первом обращении к этому свойству. Изменение
jinja_options
после этого не будет иметь никакого эффекта.
- jinja_environment¶
alias of
flask.templating.Environment
- property jinja_loader: Optional[jinja2.loaders.FileSystemLoader]¶
The Jinja loader for this object’s templates. By default this is a class
jinja2.loaders.FileSystemLoader
totemplate_folder
if it is set.Добавлено в версии 0.5.
- jinja_options: dict = {}¶
Параметры, которые передаются в среду Jinja в
create_jinja_environment()
. Изменение этих параметров после создания окружения (обращение кjinja_env
) не будет иметь никакого эффекта.Изменено в версии 1.1.0: Это
dict
вместоImmutableDict
для более простой настройки.
- json_decoder¶
alias of
flask.json.JSONDecoder
- json_encoder¶
alias of
flask.json.JSONEncoder
- log_exception(exc_info: Union[Tuple[type, BaseException, types.TracebackType], Tuple[None, None, None]]) None ¶
Записывает исключение в журнал. Вызывается
handle_exception()
, если отладка отключена, и непосредственно перед вызовом обработчика. Реализация по умолчанию регистрирует исключение как ошибку наlogger
.Добавлено в версии 0.8.
- property logger: logging.Logger¶
Стандартный Python
Logger
для приложения, с тем же именем, что иname
.В режиме отладки параметр
level
регистратора будет установлен наDEBUG
.Если обработчики не настроены, будет добавлен обработчик по умолчанию. Для получения дополнительной информации смотрите Ведение журнала.
Изменено в версии 1.1.0: Регистратор принимает то же имя, что и
name
, вместо жесткого кодирования"flask.app"
.Изменено в версии 1.0.0: Поведение было упрощено. Регистратор всегда имеет имя
"flask.app"
. Уровень устанавливается только во время конфигурации, он не проверяетapp.debug
каждый раз. Используется только один формат, а не разные в зависимости отapp.debug
. Никакие обработчики не удаляются, а добавляется обработчик только в том случае, если ни один из них еще не сконфигурирован.Добавлено в версии 0.3.
- make_config(instance_relative: bool = False) flask.config.Config ¶
Используется для создания атрибута config конструктором Flask. Параметр instance_relative передается из конструктора Flask (там он называется instance_relative_config) и указывает, должен ли конфиг быть относительным к пути экземпляра или корневому пути приложения.
Добавлено в версии 0.8.
- make_default_options_response() flask.wrappers.Response ¶
Этот метод вызывается для создания ответа по умолчанию
OPTIONS
. Его можно изменить с помощью подклассов, чтобы изменить поведение ответов по умолчаниюOPTIONS
.Добавлено в версии 0.7.
- make_response(rv: Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]) flask.wrappers.Response ¶
Преобразование возвращаемого значения из функции представления в экземпляр
response_class
.- Параметры
rv –
возвращаемое значение из функции представления. Функция представления должна возвращать ответ. Возврат
None
или завершение представления без возврата не допускается. Дляview_rv
допускаются следующие типы:str
Создается объект ответа, телом которого является строка, закодированная в UTF-8.
bytes
Создается объект ответа с байтами в качестве тела.
dict
Словарь, который будет подвергнут jsonify перед возвратом.
tuple
Либо
(body, status, headers)
,(body, status)
, либо(body, headers)
, гдеbody
- любой из других типов, разрешенных здесь,status
- строка или целое число, аheaders
- словарь или список кортежей(key, value)
. Еслиbody
является экземпляромresponse_class
,status
перезаписывает выходящее значение, аheaders
расширяется.response_class
Объект возвращается без изменений.
- другой
Response
класс Объект принудительно переводится в состояние
response_class
.callable()
Функция вызывается как приложение WSGI. Результат используется для создания объекта ответа.
Изменено в версии 0.9: Ранее кортеж интерпретировался как аргументы для объекта ответа.
- make_shell_context() dict ¶
Возвращает контекст оболочки для интерактивной оболочки для данного приложения. При этом запускаются все зарегистрированные процессоры контекста оболочки.
Добавлено в версии 0.11.
- property name: str¶
Имя приложения. Обычно это имя импорта с той разницей, что оно угадывается из файла запуска, если имя импорта - main. Это имя используется в качестве отображаемого имени, когда Flask требуется имя приложения. Оно может быть установлено и переопределено для изменения значения.
Добавлено в версии 0.8.
- open_instance_resource(resource: str, mode: str = 'rb') IO ¶
Открывает ресурс из папки экземпляра приложения (
instance_path
). В остальном работает какopen_resource()
. Ресурсы экземпляра также могут быть открыты для записи.- Параметры
resource – имя ресурса. Для доступа к ресурсам во вложенных папках используйте прямые косые черты в качестве разделителя.
mode – режим открытия файла ресурса, по умолчанию „rb“.
- open_resource(resource: str, mode: str = 'rb') IO ¶
Open a resource file relative to
root_path
for reading.For example, if the file
schema.sql
is next to the fileapp.py
where theFlask
app is defined, it can be opened with:with app.open_resource("schema.sql") as f: conn.executescript(f.read())
- Параметры
resource – Path to the resource relative to
root_path
.mode – Open the file in this mode. Only reading is supported, valid values are «r» (or «rt») and «rb».
- patch(rule: str, **options: Any) Callable[[flask.scaffold.F], flask.scaffold.F] ¶
Shortcut for
route()
withmethods=["PATCH"]
.Добавлено в версии 2.0.
- permanent_session_lifetime¶
timedelta
, который используется для установки даты истечения срока действия постоянной сессии. По умолчанию это 31 день, что позволяет постоянной сессии существовать примерно один месяц.Этот атрибут также может быть настроен из конфигурации с помощью ключа конфигурации
PERMANENT_SESSION_LIFETIME
. По умолчанию установлено значениеtimedelta(days=31)
.
- post(rule: str, **options: Any) Callable[[flask.scaffold.F], flask.scaffold.F] ¶
Shortcut for
route()
withmethods=["POST"]
.Добавлено в версии 2.0.
- preprocess_request() Optional[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]] ¶
Вызывается перед диспетчеризацией запроса. Вызывает
url_value_preprocessors
, зарегистрированный в приложении, и текущий blueprint (если есть). Затем вызываетbefore_request_funcs
, зарегистрированный в приложении и блюпринте.Если какой-либо обработчик
before_request()
возвращает значение не None, это значение обрабатывается так, как если бы это было возвращаемое значение из представления, и дальнейшая обработка запроса прекращается.
- property preserve_context_on_exception: bool¶
Возвращает значение конфигурационного значения
PRESERVE_CONTEXT_ON_EXCEPTION
в случае, если оно установлено, иначе возвращается разумное значение по умолчанию.Добавлено в версии 0.7.
- process_response(response: flask.wrappers.Response) flask.wrappers.Response ¶
Может быть переопределена для изменения объекта ответа перед его отправкой на сервер WSGI. По умолчанию будут вызываться все декорированные функции
after_request()
.Изменено в версии 0.5: Начиная с версии Flask 0.5 функции, зарегистрированные для выполнения после запроса, вызываются в обратном порядке регистрации.
- Параметры
response – объект
response_class
.- Результат
новый объект ответа или тот же самый, должен быть экземпляром
response_class
.
- property propagate_exceptions: bool¶
Возвращает значение конфигурационного значения
PROPAGATE_EXCEPTIONS
в случае, если оно установлено, иначе возвращается разумное значение по умолчанию.Добавлено в версии 0.7.
- put(rule: str, **options: Any) Callable[[flask.scaffold.F], flask.scaffold.F] ¶
Shortcut for
route()
withmethods=["PUT"]
.Добавлено в версии 2.0.
- register_blueprint(blueprint: Blueprint, **options: Any) None ¶
Зарегистрировать
Blueprint
в приложении. Аргументы ключевых слов, переданные в этот метод, переопределяют значения по умолчанию, установленные в чертеже.Вызывает метод
register()
blueprint после записи blueprint вblueprints
приложения.- Параметры
blueprint – Чертеж для регистрации.
url_prefix – Маршруты чертежей будут иметь этот префикс.
subdomain – Маршруты Blueprint будут соответствовать этому поддомену.
url_defaults – Маршруты Blueprint будут использовать эти значения по умолчанию для аргументов представления.
options – Дополнительные аргументы ключевых слов передаются в
BlueprintSetupState
. К ним можно получить доступ в обратных вызовахrecord()
.
Изменено в версии 2.0.1: The
name
option can be used to change the (pre-dotted) name the blueprint is registered with. This allows the same blueprint to be registered multiple times with unique names forurl_for
.Добавлено в версии 0.7.
- register_error_handler(code_or_exception: Union[Type[Exception], int], f: ErrorHandlerCallable) None ¶
Альтернативная функция присоединения ошибки к декоратору
errorhandler()
, более простая для использования без декоратора.Добавлено в версии 0.7.
- request_class¶
alias of
flask.wrappers.Request
- request_context(environ: dict) flask.ctx.RequestContext ¶
Создайте
RequestContext
, представляющий среду WSGI. Используйте блокwith
для толчка контекста, который заставитrequest
указывать на этот запрос.См. T.
Обычно не следует вызывать этот контекст из собственного кода. Контекст запроса автоматически подталкивается
wsgi_app()
при обработке запроса. Используйтеtest_request_context()
для создания среды и контекста вместо этого метода.- Параметры
environ – среда WSGI
- response_class¶
alias of
flask.wrappers.Response
- root_path¶
Абсолютный путь к пакету в файловой системе. Используется для поиска ресурсов, содержащихся в пакете.
- route(rule: str, **options: Any) Callable[[flask.scaffold.F], flask.scaffold.F] ¶
Decorate a view function to register it with the given URL rule and options. Calls
add_url_rule()
, which has more details about the implementation.@app.route("/") def index(): return "Hello, World!"
See Регистрация маршрутов URL.
The endpoint name for the route defaults to the name of the view function if the
endpoint
parameter isn’t passed.The
methods
parameter defaults to["GET"]
.HEAD
andOPTIONS
are added automatically.- Параметры
rule – The URL rule string.
options – Extra options passed to the
Rule
object.
- run(host: Optional[str] = None, port: Optional[int] = None, debug: Optional[bool] = None, load_dotenv: bool = True, **options: Any) None ¶
Запускает приложение на локальном сервере разработки.
Do not use
run()
in a production setting. It is not intended to meet security and performance requirements for a production server. Instead, see Варианты развертывания for WSGI server recommendations.Если установлен флаг
debug
, сервер будет автоматически перезагружаться при изменении кода и показывать отладчик в случае возникновения исключения.Если вы хотите запустить приложение в режиме отладки, но отключить выполнение кода в интерактивном отладчике, вы можете передать
use_evalex=False
в качестве параметра. Это сохранит экран трассировки отладчика активным, но отключит выполнение кода.Не рекомендуется использовать эту функцию для разработки с автоматической перезагрузкой, так как она плохо поддерживается. Вместо этого следует использовать поддержку flask скрипта командной строки
run
.Имейте в виду
Flask будет подавлять любую ошибку сервера с помощью обычной страницы ошибок, если только он не находится в режиме отладки. Чтобы включить только интерактивный отладчик без перезагрузки кода, необходимо вызвать
run()
сdebug=True
иuse_reloader=False
. Установкаuse_debugger
наTrue
без режима отладки не приведет к перехвату исключений, потому что их просто не будет.- Параметры
host – имя хоста для прослушивания. Установите значение
'0.0.0.0'
, чтобы сервер был доступен и извне. По умолчанию установлено значение'127.0.0.1'
или хост в конфигурационной переменнойSERVER_NAME
, если она присутствует.port – порт веб-сервера. По умолчанию равен
5000
или порту, определенному в конфигурационной переменнойSERVER_NAME
, если она присутствует.debug – если задан, включает или выключает режим отладки. См.
debug
.load_dotenv – Загружает ближайшие файлы
.env
и.flaskenv
для установки переменных окружения. Также изменит рабочий каталог на каталог, содержащий первый найденный файл.options – опции, которые должны быть переданы базовому серверу Werkzeug. Дополнительную информацию см. в разделе
werkzeug.serving.run_simple()
.
Изменено в версии 1.0: Если он установлен, python-dotenv будет использоваться для загрузки переменных окружения из файлов
.env
и.flaskenv
.Если установлено, переменные окружения
FLASK_ENV
иFLASK_DEBUG
будут переопределятьenv
иdebug
.По умолчанию включен многопоточный режим.
Изменено в версии 0.10: Порт по умолчанию теперь выбирается из переменной
SERVER_NAME
.
- secret_key¶
Если задан секретный ключ, криптографические компоненты могут использовать его для подписи файлов cookie и других вещей. Установите это значение на сложное случайное значение, если вы хотите использовать, например, защищенный файл cookie.
Этот атрибут также может быть настроен из конфигурации с помощью ключа конфигурации
SECRET_KEY
. По умолчанию установлено значениеNone
.
- select_jinja_autoescape(filename: str) bool ¶
Возвращает
True
, если для заданного имени шаблона должна быть активна автозамена. Если имя шаблона не задано, возвращается True.Добавлено в версии 0.5.
- send_file_max_age_default¶
A
timedelta
or number of seconds which is used as the defaultmax_age
forsend_file()
. The default isNone
, which tells the browser to use conditional requests instead of a timed cache.Configured with the
SEND_FILE_MAX_AGE_DEFAULT
configuration key.Изменено в версии 2.0: Defaults to
None
instead of 12 hours.
- send_static_file(filename: str) Response ¶
The view function used to serve files from
static_folder
. A route is automatically registered for this view atstatic_url_path
ifstatic_folder
is set.Добавлено в версии 0.5.
- session_cookie_name¶
Безопасный файл cookie использует это имя для имени сеансового файла cookie.
Этот атрибут также может быть настроен из конфигурации с помощью ключа конфигурации
SESSION_COOKIE_NAME
. По умолчанию установлено значение'session'
.
- session_interface: flask.sessions.SessionInterface = <flask.sessions.SecureCookieSessionInterface object>¶
используемый интерфейс сеанса. По умолчанию здесь используется экземпляр
SecureCookieSessionInterface
.Добавлено в версии 0.8.
- shell_context_processor(f: Callable) Callable ¶
Регистрирует функцию контекстного процессора оболочки.
Добавлено в версии 0.11.
- shell_context_processors: t.List[t.Callable[[], t.Dict[str, t.Any]]]¶
Список функций процессора контекста оболочки, которые должны быть запущены при создании контекста оболочки.
Добавлено в версии 0.11.
- should_ignore_error(error: Optional[BaseException]) bool ¶
Эта функция вызывается для того, чтобы выяснить, следует ли игнорировать ошибку или нет в отношении системы разрыва. Если эта функция возвращает
True
, то обработчикам разрыва ошибка передаваться не будет.Добавлено в версии 0.10.
- property static_folder: Optional[str]¶
The absolute path to the configured static folder.
None
if no static folder is set.
- property static_url_path: Optional[str]¶
Префикс URL, с которого будет доступен статический маршрут.
Если он не был настроен во время init, он берется из
static_folder
.
- teardown_appcontext(f: Callable[[Optional[BaseException]], None]) Callable[[Optional[BaseException]], None] ¶
Регистрирует функцию, которая будет вызываться при завершении контекста приложения. Эти функции обычно также вызываются, когда контекст запроса разворачивается.
Пример:
ctx = app.app_context() ctx.push() ... ctx.pop()
Когда
ctx.pop()
выполняется в приведенном выше примере, функции разрыва вызываются непосредственно перед тем, как контекст приложения перемещается из стека активных контекстов. Это становится актуальным, если вы используете подобные конструкции в тестах.Поскольку контекст запроса обычно также управляет контекстом приложения, он также будет вызываться, когда вы открываете контекст запроса.
Если функция разрыва была вызвана из-за необработанного исключения, ей будет передан объект ошибки. Если зарегистрирован
errorhandler()
, он обработает исключение, и функция разрыва не получит его.Возвращаемые значения функций разрыва игнорируются.
Добавлено в версии 0.9.
- teardown_appcontext_funcs: t.List[TeardownCallable]¶
Список функций, которые вызываются при разрушении контекста приложения. Поскольку контекст приложения также разрушается при завершении запроса, это место для хранения кода, который отсоединяется от баз данных.
Добавлено в версии 0.9.
- teardown_request(f: Callable[[Optional[BaseException]], None]) Callable[[Optional[BaseException]], None] ¶
Зарегистрируйте функцию, которая будет выполняться в конце каждого запроса, независимо от того, было ли исключение или нет. Эти функции выполняются, когда контекст запроса разворачивается, даже если не был выполнен фактический запрос.
Пример:
ctx = app.test_request_context() ctx.push() ... ctx.pop()
При выполнении
ctx.pop()
в приведенном выше примере функции разрыва вызываются непосредственно перед тем, как контекст запроса перемещается из стека активных контекстов. Это становится актуальным, если вы используете подобные конструкции в тестах.Teardown functions must avoid raising exceptions. If they execute code that might fail they will have to surround the execution of that code with try/except statements and log any errors.
Если функция разрыва была вызвана из-за исключения, ей будет передан объект ошибки.
Возвращаемые значения функций разрыва игнорируются.
Примечание по отладке
В режиме отладки Flask не будет немедленно завершать запрос при возникновении исключения. Вместо этого он сохранит его, чтобы интерактивный отладчик все еще мог получить к нему доступ. Это поведение можно контролировать с помощью конфигурационной переменной
PRESERVE_CONTEXT_ON_EXCEPTION
.
- teardown_request_funcs: t.Dict[AppOrBlueprintKey, t.List[TeardownCallable]]¶
A data structure of functions to call at the end of each request even if an exception is raised, in the format
{scope: [functions]}
. Thescope
key is the name of a blueprint the functions are active for, orNone
for all requests.To register a function, use the
teardown_request()
decorator.This data structure is internal. It should not be modified directly and its format may change at any time.
- template_context_processors: t.Dict[AppOrBlueprintKey, t.List[TemplateContextProcessorCallable]]¶
A data structure of functions to call to pass extra context values when rendering templates, in the format
{scope: [functions]}
. Thescope
key is the name of a blueprint the functions are active for, orNone
for all requests.To register a function, use the
context_processor()
decorator.This data structure is internal. It should not be modified directly and its format may change at any time.
- template_filter(name: Optional[str] = None) Callable[[Callable[[...], Any]], Callable[[...], Any]] ¶
Декоратор, который используется для регистрации пользовательского фильтра шаблона. Вы можете указать имя фильтра, в противном случае будет использовано имя функции. Пример:
@app.template_filter() def reverse(s): return s[::-1]
- Параметры
name – необязательное имя фильтра, иначе будет использовано имя функции.
- template_folder¶
The path to the templates folder, relative to
root_path
, to add to the template loader.None
if templates should not be added.
- template_global(name: Optional[str] = None) Callable[[Callable[[...], Any]], Callable[[...], Any]] ¶
Декоратор, который используется для регистрации глобальной функции пользовательского шаблона. Вы можете указать имя глобальной функции, в противном случае будет использовано имя функции. Пример:
@app.template_global() def double(n): return 2 * n
Добавлено в версии 0.10.
- Параметры
name – необязательное имя глобальной функции, иначе будет использовано имя функции.
- template_test(name: Optional[str] = None) Callable[[Callable[[...], bool]], Callable[[...], bool]] ¶
Декоратор, который используется для регистрации пользовательского теста шаблона. Вы можете указать имя теста, в противном случае будет использовано имя функции. Пример:
@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
Добавлено в версии 0.10.
- Параметры
name – необязательное имя теста, иначе будет использовано имя функции.
- property templates_auto_reload: bool¶
Перезагрузка шаблонов при их изменении. Используется
create_jinja_environment()
.Этот атрибут может быть настроен с помощью
TEMPLATES_AUTO_RELOAD
. Если он не установлен, то будет включен в режиме отладки.Добавлено в версии 1.0: Это свойство было добавлено, но базовая конфигурация и поведение уже существовали.
- test_cli_runner(**kwargs: Any) FlaskCliRunner ¶
Создайте программу запуска CLI для тестирования команд CLI. Смотрите Тестирование команд CLI.
Возвращает экземпляр
test_cli_runner_class
, по умолчаниюFlaskCliRunner
. В качестве первого аргумента передается объект приложения Flask.Добавлено в версии 1.0.
- test_cli_runner_class: Optional[Type[FlaskCliRunner]] = None¶
Подкласс
CliRunner
, по умолчаниюFlaskCliRunner
, который используетсяtest_cli_runner()
. Его метод__init__
должен принимать в качестве первого аргумента объект Flask app.Добавлено в версии 1.0.
- test_client(use_cookies: bool = True, **kwargs: Any) FlaskClient ¶
Creates a test client for this application. For information about unit testing head over to Тестирование приложений 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
.Изменено в версии 0.4: добавлена поддержка использования блока
with
для клиента.Добавлено в версии 0.7: Был добавлен параметр use_cookies, а также возможность переопределения используемого клиента путем установки атрибута
test_client_class
.Изменено в версии 0.11: Добавлено **kwargs для поддержки передачи дополнительных аргументов ключевых слов в конструктор
test_client_class
.
- test_client_class: Optional[Type[FlaskClient]] = None¶
The
test_client()
method creates an instance of this test client class. Defaults toFlaskClient
.Добавлено в версии 0.7.
- test_request_context(*args: Any, **kwargs: Any) flask.ctx.RequestContext ¶
Создайте
RequestContext
для среды WSGI, созданной из заданных значений. Это в основном полезно при тестировании, когда вы можете захотеть запустить функцию, которая использует данные запроса без отправки полного запроса.См. T.
Используйте блок
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 – другие позиционные аргументы, переданные в
EnvironBuilder
.kwargs – другие аргументы ключевых слов, переданные в
EnvironBuilder
.
- testing¶
Флаг тестирования. Установите это значение
True
, чтобы включить режим тестирования расширений Flask (а в будущем, возможно, и самой Flask). Например, это может активировать тестовые помощники, которые имеют дополнительные затраты времени выполнения и не должны быть включены по умолчанию.Если это включено, а PROPAGATE_EXCEPTIONS не изменен по умолчанию, то он неявно включен.
Этот атрибут также может быть настроен из конфигурации с помощью ключа конфигурации
TESTING
. По умолчанию установлено значениеFalse
.
- trap_http_exception(e: Exception) bool ¶
Проверяет, следует ли перехватывать исключение HTTP или нет. По умолчанию возвращается
False
для всех исключений, кроме ошибки плохого ключа запроса, еслиTRAP_BAD_REQUEST_ERRORS
имеет значениеTrue
. Он также возвращаетTrue
, еслиTRAP_HTTP_EXCEPTIONS
имеет значениеTrue
.Вызывается для всех исключений HTTP, вызванных функцией представления. Если она возвращает
True
для любого исключения, обработчик ошибок для этого исключения не вызывается, и оно отображается как обычное исключение в обратном пути. Это полезно для отладки неявно вызванных HTTP-исключений.Изменено в версии 1.0: Ошибки плохого запроса не отлавливаются по умолчанию в режиме отладки.
Добавлено в версии 0.8.
- update_template_context(context: dict) None ¶
Обновление контекста шаблона с некоторыми часто используемыми переменными. При этом в контекст шаблона вводятся request, session, config и g, а также все, что хотят ввести обработчики контекста шаблона. Обратите внимание, что начиная с версии Flask 0.6, исходные значения в контексте не будут отменены, если обработчик контекста решит вернуть значение с тем же ключом.
- Параметры
context – контекст как словарь, который обновляется на месте для добавления дополнительных переменных.
- url_build_error_handlers: t.List[t.Callable[[Exception, str, dict], str]]¶
Список функций, которые вызываются, когда
url_for()
вызываетBuildError
. Каждая зарегистрированная здесь функция вызывается с error, endpoint и values. Если функция возвращаетNone
или вызываетBuildError
, вызывается следующая функция.Добавлено в версии 0.9.
- url_default_functions: t.Dict[AppOrBlueprintKey, t.List[URLDefaultCallable]]¶
A data structure of functions to call to modify the keyword arguments when generating URLs, in the format
{scope: [functions]}
. Thescope
key is the name of a blueprint the functions are active for, orNone
for all requests.To register a function, use the
url_defaults()
decorator.This data structure is internal. It should not be modified directly and its format may change at any time.
- url_defaults(f: Callable[[str, dict], None]) Callable[[str, dict], None] ¶
Функция обратного вызова для URL по умолчанию для всех функций представления приложения. Она вызывается с конечной точкой и значениями и должна обновить переданные значения.
- url_map¶
Значение
Map
для данного экземпляра. Его можно использовать для изменения преобразователей маршрутизации после создания класса, но до подключения каких-либо маршрутов. Пример:from werkzeug.routing import BaseConverter class ListConverter(BaseConverter): def to_python(self, value): return value.split(',') def to_url(self, values): return ','.join(super(ListConverter, self).to_url(value) for value in values) app = Flask(__name__) app.url_map.converters['list'] = ListConverter
- url_map_class¶
alias of
werkzeug.routing.Map
- url_rule_class¶
alias of
werkzeug.routing.Rule
- url_value_preprocessor(f: Callable[[Optional[str], Optional[dict]], None]) Callable[[Optional[str], Optional[dict]], None] ¶
Зарегистрируйте функцию препроцессора значений URL для всех функций представления в приложении. Эти функции будут вызываться перед функциями
before_request()
.Функция может модифицировать значения, захваченные из сопоставленного url, прежде чем они будут переданы в представление. Например, это может быть использовано для того, чтобы вытащить значение кода общего языка и поместить его в
g
, а не передавать его каждому представлению.Функции передается имя конечной точки и диктат значений. Возвращаемое значение игнорируется.
- url_value_preprocessors: t.Dict[AppOrBlueprintKey, t.List[URLValuePreprocessorCallable]]¶
A data structure of functions to call to modify the keyword arguments passed to the view function, in the format
{scope: [functions]}
. Thescope
key is the name of a blueprint the functions are active for, orNone
for all requests.To register a function, use the
url_value_preprocessor()
decorator.This data structure is internal. It should not be modified directly and its format may change at any time.
- use_x_sendfile¶
Включите эту опцию, если вы хотите использовать функцию X-Sendfile. Имейте в виду, что сервер должен поддерживать эту функцию. Это влияет только на файлы, отправленные методом
send_file()
.Добавлено в версии 0.2.
Этот атрибут также может быть настроен из конфигурации с помощью ключа конфигурации
USE_X_SENDFILE
. По умолчанию установлено значениеFalse
.
- view_functions: t.Dict[str, t.Callable]¶
A dictionary mapping endpoint names to view functions.
To register a view function, use the
route()
decorator.This data structure is internal. It should not be modified directly and its format may change at any time.
- wsgi_app(environ: dict, start_response: Callable) Any ¶
Собственно приложение WSGI. Это не реализовано в
__call__()
, чтобы промежуточные модули можно было применять без потери ссылки на объект app. Вместо того чтобы делать это:app = MyMiddleware(app)
Вместо этого лучше сделать следующее:
app.wsgi_app = MyMiddleware(app.wsgi_app)
Тогда у вас все еще есть исходный объект приложения, и вы можете продолжать вызывать методы на нем.
Изменено в версии 0.7: События Teardown для контекстов запроса и приложения вызываются, даже если произошла необработанная ошибка. Другие события могут не вызываться в зависимости от того, когда произошла ошибка во время диспетчеризации. См. Обратные вызовы и ошибки.
- Параметры
environ – Среда WSGI.
start_response – Вызываемый объект, принимающий код состояния, список заголовков и необязательный контекст исключения для начала ответа.
Объекты чертежа¶
- class flask.Blueprint(name: str, import_name: str, static_folder: typing.Optional[typing.Union[str, os.PathLike]] = None, static_url_path: typing.Optional[str] = None, template_folder: typing.Optional[str] = None, url_prefix: typing.Optional[str] = None, subdomain: typing.Optional[str] = None, url_defaults: typing.Optional[dict] = None, root_path: typing.Optional[str] = None, cli_group: typing.Optional[str] = <object object>)¶
Представляет собой чертеж, коллекцию маршрутов и других функций, связанных с приложением, которые впоследствии могут быть зарегистрированы в реальном приложении.
Blueprint - это объект, который позволяет определять функции приложения, не требуя предварительного создания объекта приложения. Он использует те же декораторы, что и
Flask
, но откладывает необходимость в приложении, записывая их для последующей регистрации.Украшение функции чертежом создает отложенную функцию, которая вызывается с помощью
BlueprintSetupState
, когда чертеж регистрируется в приложении.See Модульные приложения с чертежами for more information.
- Параметры
name – Имя чертежа. Будет добавлено к имени каждой конечной точки.
import_name – Имя пакета чертежа, обычно
__name__
. Это помогает найтиroot_path
для чертежа.static_folder – Папка со статическими файлами, которые должны обслуживаться статическим маршрутом чертежа. Путь является относительным к корневому пути blueprint’а. По умолчанию статические файлы чертежа отключены.
static_url_path – url для обслуживания статических файлов. По умолчанию используется значение
static_folder
. Если у чертежа нетurl_prefix
, статический маршрут приложения будет иметь приоритет, и статические файлы чертежа будут недоступны.template_folder – Папка с шаблонами, которые должны быть добавлены в путь поиска шаблонов приложения. Путь является относительным к корневому пути чертежа. По умолчанию шаблоны чертежей отключены. Шаблоны чертежей имеют более низкий приоритет, чем шаблоны в папке шаблонов приложения.
url_prefix – Путь, который добавляется ко всем URL-адресам чертежа, чтобы они отличались от остальных маршрутов приложения.
subdomain – Поддомен, с которым маршруты blueprint будут сопоставляться по умолчанию.
url_defaults – Диктант значений по умолчанию, которые маршруты blueprint будут получать по умолчанию.
root_path – By default, the blueprint will automatically set this based on
import_name
. In certain situations this automatic detection can fail, so the path can be specified manually instead.
Изменено в версии 1.1.0: В чертежах есть группа
cli
для регистрации вложенных команд CLI. Параметрcli_group
управляет именем группы под командойflask
.Добавлено в версии 0.7.
- add_app_template_filter(f: Callable[[...], Any], name: Optional[str] = None) None ¶
Зарегистрируйте пользовательский фильтр шаблона, доступный для всех приложений. Подобно
Flask.add_template_filter()
, но для чертежа. Работает точно так же, как декораторapp_template_filter()
.- Параметры
name – необязательное имя фильтра, иначе будет использовано имя функции.
- add_app_template_global(f: Callable[[...], Any], name: Optional[str] = None) None ¶
Зарегистрируйте пользовательский шаблон глобально, доступный для всех приложений. Подобно
Flask.add_template_global()
, но для шаблона. Работает точно так же, как декораторapp_template_global()
.Добавлено в версии 0.10.
- Параметры
name – необязательное имя глобала, иначе будет использовано имя функции.
- add_app_template_test(f: Callable[[...], bool], name: Optional[str] = None) None ¶
Зарегистрируйте пользовательский шаблон теста, доступный во всем приложении. Подобно
Flask.add_template_test()
, но для шаблона. Работает точно так же, как декораторapp_template_test()
.Добавлено в версии 0.10.
- Параметры
name – необязательное имя теста, иначе будет использовано имя функции.
- add_url_rule(rule: str, endpoint: Optional[str] = None, view_func: Optional[Callable] = None, provide_automatic_options: Optional[bool] = None, **options: Any) None ¶
Аналогично
Flask.add_url_rule()
, но для чертежа. Конечная точка для функцииurl_for()
имеет префикс с именем чертежа.
- after_app_request(f: Callable[[Response], Response]) Callable[[Response], Response] ¶
Подобно
Flask.after_request()
, но для чертежа. Такая функция выполняется после каждого запроса, даже если она находится за пределами чертежа.
- after_request(f: Callable[[Response], Response]) Callable[[Response], Response] ¶
Register a function to run after each request to this object.
The function is called with the response object, and must return a response object. This allows the functions to modify or replace the response before it is sent.
If a function raises an exception, any remaining
after_request
functions will not be called. Therefore, this should not be used for actions that must execute, such as to close resources. Useteardown_request()
for that.
- after_request_funcs: t.Dict[AppOrBlueprintKey, t.List[AfterRequestCallable]]¶
A data structure of functions to call at the end of each request, in the format
{scope: [functions]}
. Thescope
key is the name of a blueprint the functions are active for, orNone
for all requests.To register a function, use the
after_request()
decorator.This data structure is internal. It should not be modified directly and its format may change at any time.
- app_context_processor(f: Callable[[], Dict[str, Any]]) Callable[[], Dict[str, Any]] ¶
Подобно
Flask.context_processor()
, но для чертежа. Такая функция выполняется при каждом запросе, даже если она находится за пределами чертежа.
- app_errorhandler(code: Union[Type[Exception], int]) Callable ¶
Аналогично
Flask.errorhandler()
, но для чертежа. Этот обработчик используется для всех запросов, даже если они находятся за пределами чертежа.
- app_template_filter(name: Optional[str] = None) Callable[[Callable[[...], Any]], Callable[[...], Any]] ¶
Зарегистрируйте пользовательский фильтр шаблона, доступный для всех приложений. Как
Flask.template_filter()
, но для чертежа.- Параметры
name – необязательное имя фильтра, иначе будет использовано имя функции.
- app_template_global(name: Optional[str] = None) Callable[[Callable[[...], Any]], Callable[[...], Any]] ¶
Зарегистрируйте пользовательский шаблон глобально, доступный для всех приложений. Как
Flask.template_global()
, но для чертежа.Добавлено в версии 0.10.
- Параметры
name – необязательное имя глобала, иначе будет использовано имя функции.
- app_template_test(name: Optional[str] = None) Callable[[Callable[[...], bool]], Callable[[...], bool]] ¶
Зарегистрируйте пользовательский шаблон теста, доступный во всем приложении. Подобно
Flask.template_test()
, но для чертежа.Добавлено в версии 0.10.
- Параметры
name – необязательное имя теста, иначе будет использовано имя функции.
- app_url_defaults(f: Callable[[str, dict], None]) Callable[[str, dict], None] ¶
То же, что и
url_defaults()
, но в широком применении.
- app_url_value_preprocessor(f: Callable[[Optional[str], Optional[dict]], None]) Callable[[Optional[str], Optional[dict]], None] ¶
То же, что и
url_value_preprocessor()
, но в широком применении.
- before_app_first_request(f: Callable[[], None]) Callable[[], None] ¶
Например,
Flask.before_first_request()
. Такая функция выполняется перед первым запросом к приложению.
- before_app_request(f: Callable[[], Optional[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]]]) Callable[[], Optional[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]]] ¶
Например,
Flask.before_request()
. Такая функция выполняется перед каждым запросом, даже если она находится вне чертежа.
- before_request(f: Callable[[], Optional[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]]]) Callable[[], Optional[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication]]] ¶
Register a function to run before each request.
Например, это может использоваться для открытия соединения с базой данных или для загрузки вошедшего в систему пользователя из сессии.
@app.before_request def load_user(): if "user_id" in session: g.user = db.session.get(session["user_id"])
The function will be called without any arguments. If it returns a non-
None
value, the value is handled as if it was the return value from the view, and further request handling is stopped.
- before_request_funcs: t.Dict[AppOrBlueprintKey, t.List[BeforeRequestCallable]]¶
A data structure of functions to call at the beginning of each request, in the format
{scope: [functions]}
. Thescope
key is the name of a blueprint the functions are active for, orNone
for all requests.To register a function, use the
before_request()
decorator.This data structure is internal. It should not be modified directly and its format may change at any time.
- cli¶
The Click command group for registering CLI commands for this object. The commands are available from the
flask
command once the application has been discovered and blueprints have been registered.
- context_processor(f: Callable[[], Dict[str, Any]]) Callable[[], Dict[str, Any]] ¶
Регистрирует функцию контекстного процессора шаблона.
- delete(rule: str, **options: Any) Callable[[flask.scaffold.F], flask.scaffold.F] ¶
Shortcut for
route()
withmethods=["DELETE"]
.Добавлено в версии 2.0.
- endpoint(endpoint: str) Callable ¶
Decorate a view function to register it for the given endpoint. Used if a rule is added without a
view_func
withadd_url_rule()
.app.add_url_rule("/ex", endpoint="example") @app.endpoint("example") def example(): ...
- Параметры
endpoint – The endpoint name to associate with the view function.
- error_handler_spec: t.Dict[AppOrBlueprintKey, t.Dict[t.Optional[int], t.Dict[t.Type[Exception], 'ErrorHandlerCallable']]]¶
A data structure of registered error handlers, in the format
{scope: {code: {class: handler}}}`
. Thescope
key is the name of a blueprint the handlers are active for, orNone
for all requests. Thecode
key is the HTTP status code forHTTPException
, orNone
for other exceptions. The innermost dictionary maps exception classes to handler functions.Чтобы зарегистрировать обработчик ошибок, используйте декоратор
errorhandler()
.This data structure is internal. It should not be modified directly and its format may change at any time.
- errorhandler(code_or_exception: Union[Type[Exception], int]) Callable[[ErrorHandlerCallable], ErrorHandlerCallable] ¶
Зарегистрируйте функцию для обработки ошибок по коду или классу исключений.
Декоратор, который используется для регистрации функции с кодом ошибки. Пример:
@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
Добавлено в версии 0.7: Используйте
register_error_handler()
вместо модификацииerror_handler_spec
напрямую, для обработчиков ошибок для всего приложения.Добавлено в версии 0.7: Теперь можно дополнительно регистрировать пользовательские типы исключений, которые не обязательно должны быть подклассом класса
HTTPException
.- Параметры
code_or_exception – код как целое число для обработчика, или произвольное исключение
- get(rule: str, **options: Any) Callable[[flask.scaffold.F], flask.scaffold.F] ¶
Shortcut for
route()
withmethods=["GET"]
.Добавлено в версии 2.0.
- get_send_file_max_age(filename: Optional[str]) Optional[int] ¶
Used by
send_file()
to determine themax_age
cache value for a given file path if it wasn’t passed.By default, this returns
SEND_FILE_MAX_AGE_DEFAULT
from the configuration ofcurrent_app
. This defaults toNone
, which tells the browser to use conditional requests instead of a timed cache, which is usually preferable.Изменено в версии 2.0: The default configuration is
None
instead of 12 hours.Добавлено в версии 0.9.
- property has_static_folder: bool¶
True
ifstatic_folder
is set.Добавлено в версии 0.5.
- import_name¶
The name of the package or module that this object belongs to. Do not change this once it is set by the constructor.
- property jinja_loader: Optional[jinja2.loaders.FileSystemLoader]¶
The Jinja loader for this object’s templates. By default this is a class
jinja2.loaders.FileSystemLoader
totemplate_folder
if it is set.Добавлено в версии 0.5.
- json_decoder: t.Optional[t.Type[JSONDecoder]] = None¶
Blueprint local JSON decoder class to use. Set to
None
to use the app’sjson_decoder
.
- json_encoder: t.Optional[t.Type[JSONEncoder]] = None¶
Blueprint local JSON encoder class to use. Set to
None
to use the app’sjson_encoder
.
- make_setup_state(app: Flask, options: dict, first_registration: bool = False) flask.blueprints.BlueprintSetupState ¶
Создает экземпляр объекта
BlueprintSetupState()
, который впоследствии передается функциям обратного вызова регистра. Подклассы могут переопределить эту функцию, чтобы вернуть подкласс состояния настройки.
- open_resource(resource: str, mode: str = 'rb') IO ¶
Open a resource file relative to
root_path
for reading.For example, if the file
schema.sql
is next to the fileapp.py
where theFlask
app is defined, it can be opened with:with app.open_resource("schema.sql") as f: conn.executescript(f.read())
- Параметры
resource – Path to the resource relative to
root_path
.mode – Open the file in this mode. Only reading is supported, valid values are «r» (or «rt») and «rb».
- patch(rule: str, **options: Any) Callable[[flask.scaffold.F], flask.scaffold.F] ¶
Shortcut for
route()
withmethods=["PATCH"]
.Добавлено в версии 2.0.
- post(rule: str, **options: Any) Callable[[flask.scaffold.F], flask.scaffold.F] ¶
Shortcut for
route()
withmethods=["POST"]
.Добавлено в версии 2.0.
- put(rule: str, **options: Any) Callable[[flask.scaffold.F], flask.scaffold.F] ¶
Shortcut for
route()
withmethods=["PUT"]
.Добавлено в версии 2.0.
- record(func: Callable) None ¶
Регистрирует функцию, которая вызывается при регистрации чертежа в приложении. Эта функция вызывается с состоянием в качестве аргумента, возвращаемым методом
make_setup_state()
.
- record_once(func: Callable) None ¶
Работает как
record()
, но оборачивает функцию в другую функцию, которая гарантирует, что функция будет вызвана только один раз. Если blueprint регистрируется в приложении второй раз, переданная функция не будет вызвана.
- register(app: Flask, options: dict) None ¶
Вызывается
Flask.register_blueprint()
для регистрации всех представлений и обратных вызовов, зарегистрированных на чертеже, в приложении. СоздаетBlueprintSetupState
и вызывает с его помощью каждый обратный вызовrecord()
.- Параметры
app – Приложение, в котором регистрируется данный чертеж.
options – Аргументы ключевых слов пересылаются из
register_blueprint()
.
Изменено в версии 2.0.1: Nested blueprints are registered with their dotted name. This allows different blueprints with the same name to be nested at different locations.
Изменено в версии 2.0.1: The
name
option can be used to change the (pre-dotted) name the blueprint is registered with. This allows the same blueprint to be registered multiple times with unique names forurl_for
.Изменено в версии 2.0.1: Registering the same blueprint with the same name multiple times is deprecated and will become an error in Flask 2.1.
- register_blueprint(blueprint: flask.blueprints.Blueprint, **options: Any) None ¶
Register a
Blueprint
on this blueprint. Keyword arguments passed to this method will override the defaults set on the blueprint.Изменено в версии 2.0.1: The
name
option can be used to change the (pre-dotted) name the blueprint is registered with. This allows the same blueprint to be registered multiple times with unique names forurl_for
.Добавлено в версии 2.0.
- register_error_handler(code_or_exception: Union[Type[Exception], int], f: ErrorHandlerCallable) None ¶
Альтернативная функция присоединения ошибки к декоратору
errorhandler()
, более простая для использования без декоратора.Добавлено в версии 0.7.
- root_path¶
Абсолютный путь к пакету в файловой системе. Используется для поиска ресурсов, содержащихся в пакете.
- route(rule: str, **options: Any) Callable[[flask.scaffold.F], flask.scaffold.F] ¶
Decorate a view function to register it with the given URL rule and options. Calls
add_url_rule()
, which has more details about the implementation.@app.route("/") def index(): return "Hello, World!"
See Регистрация маршрутов URL.
The endpoint name for the route defaults to the name of the view function if the
endpoint
parameter isn’t passed.The
methods
parameter defaults to["GET"]
.HEAD
andOPTIONS
are added automatically.- Параметры
rule – The URL rule string.
options – Extra options passed to the
Rule
object.
- send_static_file(filename: str) Response ¶
The view function used to serve files from
static_folder
. A route is automatically registered for this view atstatic_url_path
ifstatic_folder
is set.Добавлено в версии 0.5.
- property static_folder: Optional[str]¶
The absolute path to the configured static folder.
None
if no static folder is set.
- property static_url_path: Optional[str]¶
Префикс URL, с которого будет доступен статический маршрут.
Если он не был настроен во время init, он берется из
static_folder
.
- teardown_app_request(f: Callable[[Optional[BaseException]], None]) Callable[[Optional[BaseException]], None] ¶
Как
Flask.teardown_request()
, но для чертежа. Такая функция выполняется при сносе каждого запроса, даже если он находится за пределами чертежа.
- teardown_request(f: Callable[[Optional[BaseException]], None]) Callable[[Optional[BaseException]], None] ¶
Зарегистрируйте функцию, которая будет выполняться в конце каждого запроса, независимо от того, было ли исключение или нет. Эти функции выполняются, когда контекст запроса разворачивается, даже если не был выполнен фактический запрос.
Пример:
ctx = app.test_request_context() ctx.push() ... ctx.pop()
При выполнении
ctx.pop()
в приведенном выше примере функции разрыва вызываются непосредственно перед тем, как контекст запроса перемещается из стека активных контекстов. Это становится актуальным, если вы используете подобные конструкции в тестах.Teardown functions must avoid raising exceptions. If they execute code that might fail they will have to surround the execution of that code with try/except statements and log any errors.
Если функция разрыва была вызвана из-за исключения, ей будет передан объект ошибки.
Возвращаемые значения функций разрыва игнорируются.
Примечание по отладке
В режиме отладки Flask не будет немедленно завершать запрос при возникновении исключения. Вместо этого он сохранит его, чтобы интерактивный отладчик все еще мог получить к нему доступ. Это поведение можно контролировать с помощью конфигурационной переменной
PRESERVE_CONTEXT_ON_EXCEPTION
.
- teardown_request_funcs: t.Dict[AppOrBlueprintKey, t.List[TeardownCallable]]¶
A data structure of functions to call at the end of each request even if an exception is raised, in the format
{scope: [functions]}
. Thescope
key is the name of a blueprint the functions are active for, orNone
for all requests.To register a function, use the
teardown_request()
decorator.This data structure is internal. It should not be modified directly and its format may change at any time.
- template_context_processors: t.Dict[AppOrBlueprintKey, t.List[TemplateContextProcessorCallable]]¶
A data structure of functions to call to pass extra context values when rendering templates, in the format
{scope: [functions]}
. Thescope
key is the name of a blueprint the functions are active for, orNone
for all requests.To register a function, use the
context_processor()
decorator.This data structure is internal. It should not be modified directly and its format may change at any time.
- template_folder¶
The path to the templates folder, relative to
root_path
, to add to the template loader.None
if templates should not be added.
- url_default_functions: t.Dict[AppOrBlueprintKey, t.List[URLDefaultCallable]]¶
A data structure of functions to call to modify the keyword arguments when generating URLs, in the format
{scope: [functions]}
. Thescope
key is the name of a blueprint the functions are active for, orNone
for all requests.To register a function, use the
url_defaults()
decorator.This data structure is internal. It should not be modified directly and its format may change at any time.
- url_defaults(f: Callable[[str, dict], None]) Callable[[str, dict], None] ¶
Функция обратного вызова для URL по умолчанию для всех функций представления приложения. Она вызывается с конечной точкой и значениями и должна обновить переданные значения.
- url_value_preprocessor(f: Callable[[Optional[str], Optional[dict]], None]) Callable[[Optional[str], Optional[dict]], None] ¶
Зарегистрируйте функцию препроцессора значений URL для всех функций представления в приложении. Эти функции будут вызываться перед функциями
before_request()
.Функция может модифицировать значения, захваченные из сопоставленного url, прежде чем они будут переданы в представление. Например, это может быть использовано для того, чтобы вытащить значение кода общего языка и поместить его в
g
, а не передавать его каждому представлению.Функции передается имя конечной точки и диктат значений. Возвращаемое значение игнорируется.
- url_value_preprocessors: t.Dict[AppOrBlueprintKey, t.List[URLValuePreprocessorCallable]]¶
A data structure of functions to call to modify the keyword arguments passed to the view function, in the format
{scope: [functions]}
. Thescope
key is the name of a blueprint the functions are active for, orNone
for all requests.To register a function, use the
url_value_preprocessor()
decorator.This data structure is internal. It should not be modified directly and its format may change at any time.
Данные входящего запроса¶
- class flask.Request(environ: WSGIEnvironment, populate_request: bool = True, shallow: bool = False)¶
Объект запроса, используемый по умолчанию во Flask. Запоминает согласованные конечную точку и аргументы представления.
Это то, что заканчивается как
request
. Если вы хотите заменить используемый объект запроса, вы можете подклассифицировать этот объект и установитьrequest_class
на ваш подкласс.Объект request является подклассом
Request
и предоставляет все атрибуты, которые определяет Werkzeug, плюс несколько специфических для Flask.- environ¶
Базовая среда WSGI.
- path¶
- full_path¶
- script_root¶
- url¶
- base_url¶
- url_root¶
Предоставляет различные способы просмотра текущего RFC 3987. Представьте, что ваше приложение прослушивает следующий корень приложения:
http://www.example.com/myapplication
И пользователь запрашивает следующий URI:
http://www.example.com/myapplication/%CF%80/page.html?x=y
В этом случае значения вышеупомянутых атрибутов будут следующими:
путь
u'/π/page.html'
полный_путь
u'/π/page.html?x=y'
script_root
u'/myapplication'
базовый_url
u'http://www.example.com/myapplication/π/page.html'
url
u'http://www.example.com/myapplication/π/page.html?x=y'
url_root
u'http://www.example.com/myapplication/'
- property accept_charsets: werkzeug.datastructures.CharsetAccept¶
Список наборов символов, поддерживаемых данным клиентом, в виде объекта
CharsetAccept
.
- property accept_encodings: werkzeug.datastructures.Accept¶
Список кодировок, которые принимает данный клиент. Кодировки в термине HTTP - это кодировки сжатия, такие как gzip. Для получения информации о кодовых наборах посмотрите
accept_charset
.
- property accept_languages: werkzeug.datastructures.LanguageAccept¶
Список языков, которые этот клиент принимает как объект
LanguageAccept
.
- property accept_mimetypes: werkzeug.datastructures.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: Callable[[Request], WSGIApplication]) WSGIApplication ¶
Декорируйте функцию как ответчик, принимающий запрос в качестве последнего аргумента. Это работает как декоратор
responder()
, но функции передается объект запроса в качестве последнего аргумента, и объект запроса будет закрыт автоматически:@Request.application def my_wsgi_app(request): return Response('Hello World!')
Начиная с версии Werkzeug 0.14 исключения HTTP автоматически перехватываются и преобразуются в ответы вместо отказа.
- Параметры
f – вызываемый модуль WSGI для украшения
- Результат
новый вызываемый модуль WSGI
- property args: werkzeug.datastructures.MultiDict[str, str]¶
Разобранные параметры URL (часть URL после знака вопроса).
По умолчанию из этой функции возвращается
ImmutableMultiDict
. Это можно изменить, установивparameter_storage_class
на другой тип. Это может быть необходимо, если порядок данных формы важен.
- property authorization: Optional[werkzeug.datastructures.Authorization]¶
Объект Authorization в разобранном виде.
- property blueprint: Optional[str]¶
The registered name of the current blueprint.
This will be
None
if the endpoint is not part of a blueprint, or if URL matching failed or has not been performed yet.This does not necessarily match the name the blueprint was created with. It may have been nested, or registered with a different name.
- property blueprints: List[str]¶
The registered names of the current blueprint upwards through parent blueprints.
This will be an empty list if there is no current blueprint, or if URL matching failed.
Добавлено в версии 2.0.1.
- property cache_control: werkzeug.datastructures.RequestCacheControl¶
Объект
RequestCacheControl
для входящих заголовков управления кэшем.
- close() None ¶
Закрывает связанные ресурсы данного объекта запроса. При этом все ручки файлов закрываются явно. Вы также можете использовать объект запроса в операторе with, который автоматически закроет его.
Добавлено в версии 0.9.
- content_encoding¶
Поле заголовка сущности Content-Encoding используется в качестве модификатора к типу медиа. Когда оно присутствует, его значение указывает, какие дополнительные кодировки содержимого были применены к телу сущности, и, следовательно, какие механизмы декодирования должны быть применены, чтобы получить тип медиа, на который ссылается поле заголовка Content-Type.
Добавлено в версии 0.9.
- property content_length: Optional[int]¶
Поле заголовка сущности Content-Length указывает размер тела сущности в байтах или, в случае метода HEAD, размер тела сущности, которое было бы отправлено, если бы запрос был GET.
- content_md5¶
Поле заголовка сущности Content-MD5, как определено в RFC 1864, представляет собой дайджест MD5 тела сущности для обеспечения сквозной проверки целостности сообщения (MIC) тела сущности. (Примечание: MIC хорошо подходит для обнаружения случайного изменения тела сущности при передаче, но не защищает от злонамеренных атак).
Добавлено в версии 0.9.
- content_type¶
Поле Content-Type entity-header указывает тип носителя тела сущности, отправляемого получателю, или, в случае метода HEAD, тип носителя, который был бы отправлен, если бы запрос был GET.
- property cookies: werkzeug.datastructures.ImmutableMultiDict[str, str]¶
dict
с содержимым всех cookies, переданных вместе с запросом.
- property data: bytes¶
Содержит данные входящего запроса в виде строки в случае, если он пришел с миметипом, который Werkzeug не обрабатывает.
- date¶
Поле общего заголовка Date представляет дату и время, в которое было отправлено сообщение, имея ту же семантику, что и orig-date в RFC 822.
Изменено в версии 2.0: The datetime object is timezone-aware.
- dict_storage_class¶
- property endpoint: Optional[str]¶
The endpoint that matched the request URL.
This will be
None
if matching failed or has not been performed yet.This in combination with
view_args
can be used to reconstruct the same URL or a modified URL.
- environ: WSGIEnvironment¶
The WSGI environment containing HTTP headers and information from the WSGI server.
- property files: werkzeug.datastructures.ImmutableMultiDict[str, werkzeug.datastructures.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: werkzeug.datastructures.ImmutableMultiDict[str, str]¶
Параметры формы. По умолчанию из этой функции возвращается
ImmutableMultiDict
. Это можно изменить, установивparameter_storage_class
в другой тип. Это может быть необходимо, если порядок данных формы важен.Пожалуйста, имейте в виду, что загрузка файлов будет происходить не здесь, а в атрибуте
files
.Изменено в версии 0.9: До версии Werkzeug 0.9 здесь содержались только данные формы для запросов POST и PUT.
- form_data_parser_class¶
alias of
werkzeug.formparser.FormDataParser
- classmethod from_values(*args: Any, **kwargs: Any) werkzeug.wrappers.request.Request ¶
Создайте новый объект запроса на основе предоставленных значений. Если задано окружение, недостающие значения заполняются оттуда. Этот метод полезен для небольших скриптов, когда вам нужно имитировать запрос от URL. Не используйте этот метод для нетестирования, существует полнофункциональный объект клиента (
Client
), который позволяет создавать многокомпонентные запросы, поддерживает cookies и т.д.Принимает те же параметры, что и
EnvironBuilder
.Изменено в версии 0.5: Этот метод теперь принимает те же аргументы, что и
EnvironBuilder
. Из-за этого параметр environ теперь называется environ_overrides.- Результат
объект запроса
- get_data(cache: bool = True, as_text: bool = False, parse_form_data: bool = False) Union[bytes, str] ¶
This reads the buffered incoming data from the client into one bytes object. By default this is cached but that behavior can be changed by setting cache to False.
Обычно плохой идеей является вызов этого метода без предварительной проверки длины содержимого, так как клиент может отправить десятки мегабайт или больше, что вызовет проблемы с памятью на сервере.
Обратите внимание, что если данные формы уже были разобраны, этот метод ничего не вернет, так как разбор данных формы не кэширует данные, как это делает этот метод. Для неявного вызова функции разбора данных формы установите parse_form_data в True. После этого возвращаемое значение метода будет пустой строкой, если парсер формы обрабатывает данные. Обычно в этом нет необходимости, так как если все данные кэшируются (что делается по умолчанию), то парсер формы будет использовать кэшированные данные для разбора данных формы. Пожалуйста, не забывайте в любом случае проверять длину содержимого перед вызовом этого метода, чтобы не истощать память сервера.
If as_text is set to True the return value will be a decoded string.
Добавлено в версии 0.9.
- get_json(force: bool = False, silent: bool = False, cache: bool = True) Optional[Any] ¶
Разобрать
data
как JSON.If the mimetype does not indicate JSON (application/json, see
is_json
), or parsing fails,on_json_loading_failed()
is called and its return value is used as the return value. By default this raises a 400 Bad Request error.- Параметры
force – Игнорируйте mimetype и всегда пытайтесь разобрать JSON.
silent – Silence mimetype and parsing errors, and return
None
instead.cache – Сохраните разобранный JSON, чтобы вернуть его для последующих вызовов.
Изменено в версии 2.1: Raise a 400 error if the content type is incorrect.
- headers¶
The headers received with the request.
- property host: str¶
The host name the request was made to, including the port if it’s non-standard. Validated with
trusted_hosts
.
- property if_match: werkzeug.datastructures.ETags¶
Объект, содержащий все этаги в заголовке If-Match.
- Тип результата
- property if_modified_since: Optional[datetime.datetime]¶
The parsed If-Modified-Since header as a datetime object.
Изменено в версии 2.0: The datetime object is timezone-aware.
- property if_none_match: werkzeug.datastructures.ETags¶
Объект, содержащий все etags в заголовке If-None-Match.
- Тип результата
- property if_range: werkzeug.datastructures.IfRange¶
The parsed
If-Range
header.Изменено в версии 2.0:
IfRange.date
is timezone-aware.Добавлено в версии 0.7.
- property if_unmodified_since: Optional[datetime.datetime]¶
The parsed If-Unmodified-Since header as a datetime object.
Изменено в версии 2.0: The datetime object is timezone-aware.
- input_stream¶
The WSGI input stream.
In general it’s a bad idea to use this one because you can easily read past the boundary. Use the
stream
instead.
- 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]¶
The parsed JSON data if
mimetype
indicates JSON (application/json, seeis_json
).Вызывает
get_json()
с аргументами по умолчанию.If the request content type is not
application/json
, this will raise a 400 Bad Request error.Изменено в версии 2.1: Raise a 400 error if the content type is incorrect.
- json_module = <module 'flask.json' from '/home/gruy/projects/rtfmd.com/rtfmd.com/.venv/lib/python3.10/site-packages/flask/json/__init__.py'>¶
A module or other object that has
dumps
andloads
functions that match the API of the built-injson
module.
- list_storage_class¶
- make_form_data_parser() werkzeug.formparser.FormDataParser ¶
Создает парсер данных формы. Инстанцирует
form_data_parser_class
с некоторыми параметрами.Добавлено в версии 0.8.
- property max_content_length: Optional[int]¶
Просмотр ключа конфигурации
MAX_CONTENT_LENGTH
только для чтения.
- max_forwards¶
Поле заголовка запроса Max-Forwards предоставляет механизм с методами TRACE и OPTIONS для ограничения количества прокси-серверов или шлюзов, которые могут переслать запрос на следующий входящий сервер.
- method¶
The method the request was made with, such as
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: Optional[ValueError]) Any ¶
Called if
get_json()
fails and isn’t silenced.If this method returns a value, it is used as the return value for
get_json()
. The default implementation raisesBadRequest
.- Параметры
e – If parsing failed, this is the exception. It will be
None
if the content type wasn’tapplication/json
.
- origin¶
Хост, с которого был отправлен запрос. Установите
access_control_allow_origin
в ответе, чтобы указать, какие хосты разрешены.
- parameter_storage_class¶
- path¶
The path part of the URL after
root_path
. This is the path used for routing within the application.
- property pragma: werkzeug.datastructures.HeaderSet¶
Поле Pragma general-header используется для включения специфических для реализации директив, которые могут применяться к любому получателю по цепочке запрос/ответ. Все директивы pragma определяют необязательное поведение с точки зрения протокола; однако некоторые системы МОГУТ потребовать, чтобы поведение соответствовало директивам.
- query_string¶
The part of the URL after the «?». This is the raw value, use
args
for the parsed values.
- property range: Optional[werkzeug.datastructures.Range]¶
Разобранный заголовок Range.
Добавлено в версии 0.7.
- Тип результата
- referrer¶
Поле заголовка запроса Referer позволяет клиенту указать, в интересах сервера, адрес (URI) ресурса, с которого был получен Request-URI («referrer», хотя поле заголовка написано неправильно).
- remote_addr¶
The address of the client sending the request.
- remote_user¶
Если сервер поддерживает аутентификацию пользователя, и сценарий защищен, этот атрибут содержит имя пользователя, под которым он прошел аутентификацию.
- root_path¶
The prefix that the application is mounted under, without a trailing slash.
path
comes after this.
- property root_url: str¶
The request URL scheme, host, and root path. This is the root that the application is accessed from.
- routing_exception: Optional[Exception] = None¶
Если совпадение URL не удалось, это исключение, которое будет вызвано / было вызвано в процессе обработки запроса. Обычно это исключение
NotFound
или что-то подобное.
- scheme¶
The URL scheme of the protocol the request used, such as
https
orwss
.
- property script_root: str¶
Alias for
self.root_path
.environ["SCRIPT_ROOT"]
without a trailing slash.
- server¶
The address of the server.
(host, port)
,(path, None)
for unix sockets, orNone
if not known.
- shallow: bool¶
Set when creating the request object. If
True
, reading from the request body will cause aRuntimeException
. Useful to prevent modifying the stream from middleware.
- property stream: IO[bytes]¶
Если входящие данные формы не были закодированы известным mimetype, данные сохраняются в этом потоке в неизменном виде для последующего использования. В большинстве случаев лучше использовать
data
, что даст вам эти данные в виде строки. Поток возвращает данные только один раз.В отличие от
input_stream
этот поток должным образом охраняется, чтобы вы не могли случайно прочитать больше длины входных данных. Werkzeug внутренне всегда будет ссылаться на этот поток для чтения данных, что позволяет обернуть этот объект потоком, который выполняет фильтрацию.Изменено в версии 0.9: Теперь этот поток всегда доступен, но может быть использован парсером формы позже. Ранее поток устанавливался только в том случае, если парсинг не выполнялся.
- property url_charset: str¶
The charset that is assumed for URLs. Defaults to the value of
charset
.Добавлено в версии 0.6.
- property url_root: str¶
Alias for
root_url
. The URL with scheme, host, and root path. For example,https://example.com/app/
.
- url_rule: Optional[Rule] = None¶
Внутреннее правило URL, соответствующее запросу. Это может быть полезно для проверки того, какие методы разрешены для URL из обработчика до/после (
request.url_rule.methods
) и т.д. Хотя если метод запроса был недопустимым для правила URL, то вместо него допустимый список доступен вrouting_exception.valid_methods
(атрибут исключения WerkzeugMethodNotAllowed
), поскольку запрос никогда не был внутренне связан.Добавлено в версии 0.6.
- property user_agent: werkzeug.user_agent.UserAgent¶
The user agent. Use
user_agent.string
to get the header value. Setuser_agent_class
to a subclass ofUserAgent
to provide parsing for the other properties or other extended data.Изменено в версии 2.0: The built in parser is deprecated and will be removed in Werkzeug 2.1. A
UserAgent
subclass must be set to parse data from the string.
- user_agent_class¶
alias of
werkzeug.user_agent.UserAgent
- property values: werkzeug.datastructures.CombinedMultiDict[str, str]¶
werkzeug.datastructures.CombinedMultiDict
, который объединяетargs
иform
.For GET requests, only
args
are present, notform
.Изменено в версии 2.0: For GET requests, only
args
are present, notform
.
- flask.request¶
T
Это прокси. См. раздел Примечания о доверенностях для получения дополнительной информации.
Объект запроса является экземпляром подкласса
Request
и предоставляет все атрибуты, которые определяет Werkzeug. Здесь приведен лишь краткий обзор наиболее важных из них.
Объекты реагирования¶
- class flask.Response(response: Optional[Union[Iterable[bytes], bytes, Iterable[str], str]] = None, status: Optional[Union[int, str, http.HTTPStatus]] = None, headers: Optional[Union[Mapping[str, Union[str, int, Iterable[Union[str, int]]]], Iterable[Tuple[str, Union[str, int]]]]] = None, mimetype: Optional[str] = None, content_type: Optional[str] = None, direct_passthrough: bool = False)¶
Объект ответа, который по умолчанию используется во Flask. Работает как объект ответа из Werkzeug, но по умолчанию имеет HTML-миметип. Довольно часто вам не нужно создавать этот объект самостоятельно, поскольку
make_response()
позаботится об этом за вас.Если вы хотите заменить используемый объект ответа, вы можете подклассифицировать этот объект и установить
response_class
на свой подкласс.Изменено в версии 1.0: Поддержка JSON добавляется в ответ, как и в запрос. Это полезно при тестировании для получения данных ответа тестового клиента в формате JSON.
Изменено в версии 1.0: Добавлено
max_cookie_size
.- status¶
Строка со статусом ответа.
- status_code¶
Статус ответа в виде целого числа.
- get_json(force: bool = False, silent: bool = False) Optional[Any] ¶
Parse
data
as JSON. Useful during testing.If the mimetype does not indicate JSON (application/json, see
is_json
), this returnsNone
.Unlike
Request.get_json()
, the result is not cached.- Параметры
force – Игнорируйте mimetype и всегда пытайтесь разобрать JSON.
silent – Замалчивать ошибки синтаксического анализа и возвращать вместо них
None
.
- property is_json: bool¶
Проверьте, указывает ли mimetype на данные JSON, либо application/json, либо application/*+json.
- property max_cookie_size: int¶
Просмотр ключа конфигурации
MAX_COOKIE_SIZE
только для чтения.See
max_cookie_size
in Werkzeug’s docs.
- set_cookie(key: str, value: str = '', max_age: Optional[Union[datetime.timedelta, int]] = None, expires: Optional[Union[str, datetime.datetime, int, float]] = None, path: Optional[str] = '/', domain: Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: Optional[str] = None) None ¶
Sets a cookie.
Выдается предупреждение, если размер заголовка cookie превышает
max_cookie_size
, но заголовок все равно будет установлен.- Параметры
key – ключ (имя) устанавливаемого файла cookie.
value – значение файла cookie.
max_age – должно быть числом секунд, или None (по умолчанию), если cookie должен действовать только до тех пор, пока длится сессия браузера клиента.
expires – должен быть объектом datetime или временной меткой UNIX.
path – ограничивает cookie заданным путем, по умолчанию он будет охватывать весь домен.
domain – если вы хотите установить междоменный файл cookie. Например,
domain=".example.com"
установит cookie, который будет доступен для чтения доменамwww.example.com
,foo.example.com
и т.д. В противном случае cookie будет доступен для чтения только в том домене, который его установил.secure – If
True
, the cookie will only be available via HTTPS.httponly – Disallow JavaScript access to the cookie.
samesite – Limit the scope of the cookie to only be attached to requests that are «same-site».
Сессии¶
Если вы установили 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
(что является значением по умолчанию), сессия будет удалена, когда пользователь закроет браузер.
Интерфейс сеанса¶
Добавлено в версии 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()
Multiple requests with the same session may be sent and handled concurrently. When implementing a new session interface, consider whether reads or writes to the backing store must be synchronized. There is no guarantee on the order in which the session for each request is opened or saved, it will occur in the order that requests begin and end processing.
Добавлено в версии 0.8.
- get_cookie_domain(app: Flask) Optional[str] ¶
Возвращает домен, который должен быть установлен для сессионного cookie.
Использует
SESSION_COOKIE_DOMAIN
, если он настроен, иначе возвращается к определению домена на основеSERVER_NAME
.После обнаружения (или если он вообще не установлен),
SESSION_COOKIE_DOMAIN
обновляется, чтобы избежать повторного запуска логики.
- get_cookie_httponly(app: Flask) bool ¶
Возвращает True, если сессионная cookie должна быть httponly. В настоящее время возвращается только значение переменной конфигурации
SESSION_COOKIE_HTTPONLY
.
- get_cookie_name(app: Flask) str ¶
Returns the name of the session cookie.
Uses
app.session_cookie_name
which is set toSESSION_COOKIE_NAME
- get_cookie_path(app: Flask) str ¶
Возвращает путь, для которого cookie должен быть действительным. Реализация по умолчанию использует значение из конфигурационной переменной
SESSION_COOKIE_PATH
, если оно установлено, и возвращается кAPPLICATION_ROOT
или использует/
, если оноNone
.
- get_cookie_samesite(app: Flask) str ¶
Возвращает
'Strict'
или'Lax'
, если cookie должен использовать атрибутSameSite
. В настоящее время возвращается только значение параметраSESSION_COOKIE_SAMESITE
.
- get_cookie_secure(app: Flask) bool ¶
Возвращает True, если cookie должен быть безопасным. В настоящее время возвращается значение параметра
SESSION_COOKIE_SECURE
.
- get_expiration_time(app: Flask, session: flask.sessions.SessionMixin) Optional[datetime.datetime] ¶
Вспомогательный метод, который возвращает дату истечения срока действия сессии или
None
, если сессия связана с сессией браузера. Реализация по умолчанию возвращает сейчас + постоянное время жизни сессии, настроенное в приложении.
- is_null_session(obj: object) bool ¶
Проверяет, является ли данный объект нулевой сессией. Нулевые сессии не запрашиваются для сохранения.
По умолчанию проверяется, является ли объект экземпляром
null_session_class
.
- make_null_session(app: Flask) flask.sessions.NullSession ¶
Создает нулевой сеанс, который действует как объект замены, если поддержка реального сеанса не может быть загружена из-за ошибки конфигурации. Это в основном улучшает работу пользователя, поскольку задача нулевой сессии - по-прежнему поддерживать поиск без жалоб, а на модификации отвечать полезным сообщением об ошибке.
По умолчанию создается экземпляр
null_session_class
.
- null_session_class¶
make_null_session()
будет искать здесь класс, который должен быть создан при запросе нулевой сессии. Аналогично методis_null_session()
будет выполнять проверку типа по этому типу.alias of
flask.sessions.NullSession
- open_session(app: Flask, request: Request) Optional[flask.sessions.SessionMixin] ¶
This is called at the beginning of each request, after pushing the request context, before matching the URL.
This must return an object which implements a dictionary-like interface as well as the
SessionMixin
interface.This will return
None
to indicate that loading failed in some way that is not immediately an error. The request context will fall back to usingmake_null_session()
in this case.
- pickle_based = False¶
Флаг, указывающий, основан ли интерфейс сессии на pickle. Он может использоваться расширениями Flask для принятия решения о том, как работать с объектом сессии.
Добавлено в версии 0.10.
- save_session(app: Flask, session: flask.sessions.SessionMixin, response: Response) None ¶
This is called at the end of each request, after generating a response, before removing the request context. It is skipped if
is_null_session()
returnsTrue
.
- should_set_cookie(app: Flask, session: flask.sessions.SessionMixin) bool ¶
Используется сессионными бэкендами для определения того, следует ли установить заголовок
Set-Cookie
для куки этой сессии для данного ответа. Если сессия была изменена, cookie устанавливается. Если сессия постоянна и конфигурацияSESSION_REFRESH_EACH_REQUEST
равна true, cookie устанавливается всегда.Эта проверка обычно пропускается, если сессия была удалена.
Добавлено в версии 0.11.
- class flask.sessions.SecureCookieSessionInterface¶
Интерфейс сессий по умолчанию, который хранит сессии в подписанных cookies через модуль
itsdangerous
.- static digest_method(string=b'', *, usedforsecurity=True)¶
хэш-функция, которую следует использовать для подписи. По умолчанию используется sha1
- key_derivation = 'hmac'¶
имя поддерживаемого itsdangerous производного ключа. По умолчанию используется hmac.
- open_session(app: Flask, request: Request) Optional[flask.sessions.SecureCookieSession] ¶
This is called at the beginning of each request, after pushing the request context, before matching the URL.
This must return an object which implements a dictionary-like interface as well as the
SessionMixin
interface.This will return
None
to indicate that loading failed in some way that is not immediately an error. The request context will fall back to usingmake_null_session()
in this case.
- salt = 'cookie-session'¶
соль, которая должна быть применена поверх секретного ключа для подписи сессий на основе cookie.
- save_session(app: Flask, session: flask.sessions.SessionMixin, response: Response) None ¶
This is called at the end of each request, after generating a response, before removing the request context. It is skipped if
is_null_session()
returnsTrue
.
- serializer = <flask.json.tag.TaggedJSONSerializer object>¶
Сериализатор Python для полезной нагрузки. По умолчанию используется компактный сериализатор, производный от JSON, с поддержкой некоторых дополнительных типов Python, таких как объекты datetime или кортежи.
- session_class¶
alias of
flask.sessions.SecureCookieSession
- class flask.sessions.SecureCookieSession(initial: Optional[Any] = None)¶
Базовый класс для сессий, основанных на подписанных cookies.
Этот бэкенд сессии будет устанавливать атрибуты
modified
иaccessed
. Он не может надежно отследить, является ли сессия новой (по сравнению с пустой), поэтомуnew
остается жестко закодированным наFalse
.- accessed = False¶
заголовок, который позволяет кэширующим прокси-серверам кэшировать разные страницы для разных пользователей.
- get(key: str, default: Optional[Any] = None) Any ¶
Возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию.
- modified = False¶
Когда данные изменяются, это значение устанавливается в
True
. Отслеживается только сам словарь сессии; если сессия содержит изменяемые данные (например, вложенный dict), то это значение должно быть установлено вTrue
вручную при изменении этих данных. Куки сессии будут записаны в ответ, только если это значениеTrue
.
- class flask.sessions.NullSession(initial: Optional[Any] = None)¶
Класс используется для генерации более красивых сообщений об ошибках, если сессии недоступны. Он все еще разрешает доступ только для чтения к пустой сессии, но при установке выдает ошибку.
- clear() None. Remove all items from D. ¶
- pop(k[, d]) v, remove specified key and return the corresponding value. ¶
If the key is not found, return the default if given; otherwise, raise a KeyError.
- popitem(*args: Any, **kwargs: Any) te.NoReturn ¶
Remove and return a (key, value) pair as a 2-tuple.
Pairs are returned in LIFO (last-in, first-out) order. Raises KeyError if the dict is empty.
- setdefault(*args: Any, **kwargs: Any) te.NoReturn ¶
Вставка ключа со значением по умолчанию, если ключ отсутствует в словаре.
Возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию.
- update([E, ]**F) None. Update D from dict/iterable E and F. ¶
If E is present and has a .keys() method, then does: for k in E: D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]
- class flask.sessions.SessionMixin¶
Расширяет базовый словарь с атрибутами сессии.
- accessed = True¶
Некоторые реализации могут определять, когда данные сессии считываются или записываются, и устанавливать это значение, когда это происходит. В миксине по умолчанию жестко задано значение
True
.
- modified = True¶
Некоторые реализации могут обнаруживать изменения в сессии и устанавливать это значение, когда это происходит. В миксине по умолчанию жестко задано значение
True
.
Уведомление
Ключ конфигурации PERMANENT_SESSION_LIFETIME
также может быть целым числом, начиная с версии Flask 0.8. Либо поймайте это самостоятельно, либо используйте атрибут permanent_session_lifetime
в приложении, который автоматически преобразует результат в целое число.
Тестовый клиент¶
- class flask.testing.FlaskClient(*args: Any, **kwargs: Any)¶
Работает как обычный тестовый клиент Werkzeug, но имеет некоторые знания о том, как работает Flask, чтобы отложить очистку стека контекста запроса до конца тела
with
при использовании в оператореwith
. За общей информацией о том, как использовать этот класс, обратитесь кwerkzeug.test.Client
.Изменено в версии 0.12: app.test_client() включает предустановленное окружение по умолчанию, которое может быть установлено после инстанцирования объекта app.test_client() в client.environ_base.
Basic usage is outlined in the Тестирование приложений Flask chapter.
- open(*args: Any, buffered: bool = False, follow_redirects: bool = False, **kwargs: Any) TestResponse ¶
Generate an environ dict from the given arguments, make a request to the application using it, and return the response.
- Параметры
args – Passed to
EnvironBuilder
to create the environ for the request. If a single arg is passed, it can be an existingEnvironBuilder
or an environ dict.buffered – Convert the iterator returned by the app into a list. If the iterator has a
close()
method, it is called automatically.follow_redirects – Make additional requests to follow HTTP redirects until a non-redirect status is returned.
TestResponse.history
lists the intermediate responses.
Изменено в версии 2.1: Removed the
as_tuple
parameter.Изменено в версии 2.0:
as_tuple
is deprecated and will be removed in Werkzeug 2.1. UseTestResponse.request
andrequest.environ
instead.Изменено в версии 2.0: The request input stream is closed when calling
response.close()
. Input streams for redirects are automatically closed.Изменено в версии 0.5: If a dict is provided as file in the dict for the
data
parameter the content type has to be calledcontent_type
instead ofmimetype
. This change was made for consistency withwerkzeug.FileWrapper
.Изменено в версии 0.5: Added the
follow_redirects
parameter.
- session_transaction(*args: Any, **kwargs: Any) Generator[flask.sessions.SessionMixin, None, None] ¶
При использовании в сочетании с оператором
with
это открывает транзакцию сессии. Это может быть использовано для изменения сессии, которую использует тестовый клиент. После выхода из блокаwith
сессия сохраняется обратно.with client.session_transaction() as session: session['value'] = 42
Внутренне это реализуется путем прохождения через временный контекст тестового запроса, и поскольку обработка сессии может зависеть от переменных запроса, эта функция принимает те же аргументы, что и
test_request_context()
, которые передаются напрямую.
Тестирование CLI Runner¶
- class flask.testing.FlaskCliRunner(app: Flask, **kwargs: Any)¶
CliRunner
для тестирования команд CLI приложения Flask. Обычно создается с помощьюtest_cli_runner()
. См. Тестирование команд CLI.- invoke(cli: Optional[Any] = None, args: Optional[Any] = None, **kwargs: Any) Any ¶
Вызывает команду CLI в изолированной среде. Полную документацию по методу см. в
CliRunner.invoke
. Примеры см. в разделе Тестирование команд CLI.Если аргумент
obj
не указан, передается экземплярScriptInfo
, который знает, как загрузить тестируемое приложение Flask.- Параметры
cli – Объект команды для вызова. По умолчанию это группа приложения
cli
.args – Список строк для вызова команды.
- Результат
объект
Result
.
Глобальные приложения¶
Для передачи данных, действительных только для одного запроса, от одной функции к другой глобальная переменная не подходит, так как в многопоточных средах она будет ломаться. Flask предоставляет вам специальный объект, который гарантирует, что он действителен только для активного запроса, и который будет возвращать разные значения для каждого запроса. В двух словах: он делает правильную вещь, как для request
и session
.
- flask.g¶
Объект пространства имен, который может хранить данные во время application context. Это экземпляр
Flask.app_ctx_globals_class
, который по умолчанию равенctx._AppCtxGlobals
.Это хорошее место для хранения ресурсов во время запроса. Во время тестирования можно использовать шаблон Подделка ресурсов и контекста для предварительной настройки таких ресурсов.
Это прокси. См. раздел Примечания о доверенностях для получения дополнительной информации.
Изменено в версии 0.10: Привязка к контексту приложения вместо контекста запроса.
- class flask.ctx._AppCtxGlobals¶
Обычный объект. Используется в качестве пространства имен для хранения данных в контексте приложения.
Создание контекста приложения автоматически создает этот объект, который становится доступным как прокси
g
.- 'key' in g
Проверьте, присутствует ли атрибут.
Добавлено в версии 0.10.
- iter(g)
Возвращает итератор по именам атрибутов.
Добавлено в версии 0.10.
- get(name: str, default: Optional[Any] = None) Any ¶
Получение атрибута по имени или значению по умолчанию. Например,
dict.get()
.- Параметры
name – Имя атрибута, который нужно получить.
default – Значение, возвращаемое в случае отсутствия атрибута.
Добавлено в версии 0.10.
- pop(name: str, default: typing.Any = <object object>) Any ¶
Получение и удаление атрибута по имени. Например,
dict.pop()
.- Параметры
name – Имя атрибута, который нужно распечатать.
default – Value to return if the attribute is not present, instead of raising a
KeyError
.
Добавлено в версии 0.11.
- setdefault(name: str, default: Optional[Any] = None) Any ¶
Получить значение атрибута, если он присутствует, в противном случае установить и вернуть значение по умолчанию. Например,
dict.setdefault()
.- Параметры
name – Имя атрибута, который нужно получить.
default – Value to set and return if the attribute is not present.
Добавлено в версии 0.11.
Полезные функции и классы¶
- flask.current_app¶
Прокси-сервер для приложения, обрабатывающего текущий запрос. Это полезно для доступа к приложению без необходимости его импортирования или если его нельзя импортировать, например, при использовании шаблона фабрики приложений или в чертежах и расширениях.
Это доступно только при нажатии application context. Это происходит автоматически во время запросов и команд CLI. Им можно управлять вручную с помощью
app_context()
.Это прокси. См. раздел Примечания о доверенностях для получения дополнительной информации.
- flask.has_request_context() bool ¶
Если у вас есть код, который хочет проверить, есть ли контекст запроса или нет, можно использовать эту функцию. Например, вы можете захотеть воспользоваться информацией о запросе, если объект запроса доступен, но молча отказаться, если он недоступен.
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
Добавлено в версии 0.7.
- flask.copy_current_request_context(f: Callable) Callable ¶
Вспомогательная функция, которая украшает функцию для сохранения текущего контекста запроса. Это полезно при работе с гринлетами. В момент декорирования функции создается копия контекста запроса, которая затем выталкивается при вызове функции. Текущая сессия также включается в скопированный контекст запроса.
Пример:
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'
Добавлено в версии 0.10.
- flask.has_app_context() bool ¶
Работает как
has_request_context()
, но для контекста приложения. Вместо этого можно просто выполнить проверку булевой функции на объектеcurrent_app
.Добавлено в версии 0.9.
- flask.url_for(endpoint: str, **values: Any) str ¶
Генерирует URL к заданной конечной точке с помощью предоставленного метода.
Переменные аргументы, которые неизвестны целевой конечной точке, добавляются к сгенерированному URL в качестве аргументов запроса. Если значение аргумента запроса равно
None
, вся пара пропускается. Если чертежи активны, вы можете сократить ссылки на один и тот же чертеж, добавив к локальной конечной точке точку (.
).Это приведет к ссылке на индексную функцию, локальную для текущего чертежа:
url_for('.index')
Значения конфигурации
APPLICATION_ROOT
иSERVER_NAME
используются только при генерации URL вне контекста запроса.Для интеграции приложений в
Flask
имеется хук для перехвата ошибок сборки URL черезFlask.url_build_error_handlers
. Функция url_for приводит к появлениюBuildError
, когда у текущего приложения нет URL для заданной конечной точки и значений. Когда он есть,current_app
вызывает свойurl_build_error_handlers
, если он неNone
, который может вернуть строку для использования в качестве результата url_for (вместо url_for по умолчанию вызывает исключениеBuildError
) или повторно вызвать исключение. Пример:def external_url_handler(error, endpoint, values): "Looks up an external URL when `url_for` cannot build a URL." # This is an example of hooking the build_error_handler. # Here, lookup_url is some utility function you've built # which looks up the endpoint in some external URL registry. url = lookup_url(endpoint, **values) if url is None: # External lookup did not have a URL. # Re-raise the BuildError, in context of original traceback. exc_type, exc_value, tb = sys.exc_info() if exc_value is error: raise exc_type(exc_value).with_traceback(tb) else: raise error # url_for will use this result, instead of raising BuildError. return url app.url_build_error_handlers.append(external_url_handler)
Здесь error - это экземпляр
BuildError
, а endpoint и values - это аргументы, переданные в url_for. Обратите внимание, что это предназначено для построения URL вне текущего приложения, а не для обработки ошибки 404 NotFound.Добавлено в версии 0.10: Добавлен параметр _scheme.
Добавлено в версии 0.9: Добавлены параметры _anchor and _method.
Добавлено в версии 0.9: Вызывает
Flask.handle_build_error()
наBuildError
.- Параметры
endpoint – конечная точка URL (имя функции)
values – переменные аргументы правила URL
_external – если установлено значение
True
, генерируется абсолютный URL. Адрес сервера может быть изменен с помощью конфигурационной переменнойSERVER_NAME
, которая возвращается к заголовку Host, затем к IP и порту запроса._scheme – a string specifying the desired URL scheme. The _external parameter must be set to
True
or aValueError
is raised. The default behavior uses the same scheme as the current request, orPREFERRED_URL_SCHEME
if no request context is available. This also can be set to an empty string to build protocol-relative URLs._anchor – если он указан, то добавляется в качестве якоря к URL.
_method – если это явно указывает на метод HTTP.
- flask.abort(status: Union[int, Response], *args: Any, **kwargs: Any) te.NoReturn ¶
Вызывает
HTTPException
для заданного кода состояния или приложения WSGI.Если указан код состояния, он будет найден в списке исключений и вызовет это исключение. Если передано приложение WSGI, оно обернет его в прокси-исключение WSGI и поднимет это исключение:
abort(404) # 404 Not Found abort(Response('Hello World'))
- flask.redirect(location: str, code: int = 302, Response: Optional[Type[Response]] = None) Response ¶
Возвращает объект ответа (приложение WSGI), который, если его вызвать, перенаправляет клиента на целевое место. Поддерживаются следующие коды: 301, 302, 303, 305, 307 и 308. 300 не поддерживается, потому что это не настоящее перенаправление, а 304 - потому что это ответ на запрос с определенными заголовками If-Modified-Since.
Добавлено в версии 0.6: Теперь местоположение может быть строкой unicode, которая кодируется с помощью функции
iri_to_uri()
.Добавлено в версии 0.10: Теперь можно передать класс, используемый для объекта Response.
- Параметры
location – местоположение, на которое должен быть перенаправлен ответ.
code – код состояния перенаправления. по умолчанию 302.
Response (class) – класс Response для использования при инстанцировании ответа. По умолчанию используется
werkzeug.wrappers.Response
, если не указано.
- flask.make_response(*args: Any) Response ¶
Иногда возникает необходимость установить дополнительные заголовки в представлении. Поскольку представления не обязаны возвращать объекты ответа, а могут возвращать значение, которое преобразуется в объект ответа самой 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()
в виде кортежа.
Добавлено в версии 0.6.
- flask.after_this_request(f: Callable[[Response], Response]) Callable[[Response], Response] ¶
Выполняет функцию после данного запроса. Это полезно для изменения объектов ответа. Функции передается объект ответа, и она должна вернуть тот же или новый объект.
Пример:
@app.route('/') def index(): @after_this_request def add_header(response): response.headers['X-Foo'] = 'Parachute' return response return 'Hello World!'
Это более полезно, если функция, отличная от функции представления, хочет изменить ответ. Например, подумайте о декораторе, который хочет добавить некоторые заголовки без преобразования возвращаемого значения в объект ответа.
Добавлено в версии 0.9.
- flask.send_file(path_or_file: Union[os.PathLike, str, BinaryIO], mimetype: Optional[str] = None, as_attachment: bool = False, download_name: Optional[str] = None, attachment_filename: Optional[str] = None, conditional: bool = True, etag: Union[bool, str] = True, add_etags: Optional[bool] = None, last_modified: Optional[Union[datetime.datetime, int, float]] = None, max_age: Optional[Union[int, Callable[[Optional[str]], Optional[int]]]] = None, cache_timeout: Optional[int] = None)¶
Send the contents of a file to the client.
The first argument can be a file path or a file-like object. Paths are preferred in most cases because Werkzeug can manage the file and get extra information from the path. Passing a file-like object requires that the file is opened in binary mode, and is mostly useful when building a file in memory with
io.BytesIO
.Never pass file paths provided by a user. The path is assumed to be trusted, so a user could craft a path to access a file you didn’t intend. Use
send_from_directory()
to safely serve user-requested paths from within a directory.If the WSGI server sets a
file_wrapper
inenviron
, it is used, otherwise Werkzeug’s built-in wrapper is used. Alternatively, if the HTTP server supportsX-Sendfile
, configuring Flask withUSE_X_SENDFILE = True
will tell the server to send the given path, which is much more efficient than reading it in Python.- Параметры
path_or_file – The path to the file to send, relative to the current working directory if a relative path is given. Alternatively, a file-like object opened in binary mode. Make sure the file pointer is seeked to the start of the data.
mimetype – The MIME type to send for the file. If not provided, it will try to detect it from the file name.
as_attachment – Indicate to a browser that it should offer to save the file instead of displaying it.
download_name – The default name browsers will use when saving the file. Defaults to the passed file name.
conditional – Enable conditional and range responses based on request headers. Requires passing a file path and
environ
.etag – Calculate an ETag for the file, which requires passing a file path. Can also be a string to use instead.
last_modified – The last modified time to send for the file, in seconds. If not provided, it will try to detect it from the file path.
max_age – How long the client should cache the file, in seconds. If set,
Cache-Control
will bepublic
, otherwise it will beno-cache
to prefer conditional caching.
Изменено в версии 2.0:
download_name
replaces theattachment_filename
parameter. Ifas_attachment=False
, it is passed withContent-Disposition: inline
instead.Изменено в версии 2.0:
max_age
replaces thecache_timeout
parameter.conditional
is enabled andmax_age
is not set by default.Изменено в версии 2.0:
etag
replaces theadd_etags
parameter. It can be a string to use instead of generating one.Изменено в версии 2.0: Passing a file-like object that inherits from
TextIOBase
will raise aValueError
rather than sending an empty file.Добавлено в версии 2.0: Moved the implementation to Werkzeug. This is now a wrapper to pass some Flask-specific arguments.
Изменено в версии 1.1:
filename
may be aPathLike
object.Изменено в версии 1.1: Passing a
BytesIO
object supports range requests.Изменено в версии 1.0.3: Имена файлов кодируются ASCII вместо Latin-1 для большей совместимости с серверами WSGI.
Изменено в версии 1.0: UTF-8 filenames as specified in RFC 2231 are supported.
Изменено в версии 0.12: The filename is no longer automatically inferred from file objects. If you want to use automatic MIME and etag support, pass a filename via
filename_or_fp
orattachment_filename
.Изменено в версии 0.12:
attachment_filename
is preferred overfilename
for MIME detection.Изменено в версии 0.9:
cache_timeout
defaults toFlask.get_send_file_max_age()
.Изменено в версии 0.7: MIME guessing and etag support for file-like objects was deprecated because it was unreliable. Pass a filename if you are able to, otherwise attach an etag yourself.
Изменено в версии 0.5: The
add_etags
,cache_timeout
andconditional
parameters were added. The default behavior is to add etags.Добавлено в версии 0.2.
- flask.send_from_directory(directory: Union[os.PathLike, str], path: Union[os.PathLike, str], filename: Optional[str] = None, **kwargs: Any) Response ¶
Send a file from within a directory using
send_file()
.@app.route("/uploads/<path:name>") def download_file(name): return send_from_directory( app.config['UPLOAD_FOLDER'], name, as_attachment=True )
This is a secure way to serve files from a folder, such as static files or uploads. Uses
safe_join()
to ensure the path coming from the client is not maliciously crafted to point outside the specified directory.If the final path does not point to an existing regular file, raises a 404
NotFound
error.- Параметры
directory – The directory that
path
must be located under.path – The path to the file to send, relative to
directory
.kwargs – Arguments to pass to
send_file()
.
Изменено в версии 2.0:
path
replaces thefilename
parameter.Добавлено в версии 2.0: Moved the implementation to Werkzeug. This is now a wrapper to pass some Flask-specific arguments.
Добавлено в версии 0.5.
- flask.escape()¶
Replace the characters
&
,<
,>
,'
, and"
in the string with HTML-safe sequences. Use this if you need to display text that might contain such characters in HTML.If the object has an
__html__
method, it is called and the return value is assumed to already be safe for HTML.- Параметры
s – An object to be converted to a string and escaped.
- Результат
A
Markup
string with the escaped text.
- class flask.Markup(base: Any = '', encoding: Optional[str] = None, errors: str = '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>')
This is a subclass of
str
. It has the same methods, but escapes their arguments and returns aMarkup
instance.>>> Markup("<em>%s</em>") % ("foo & bar",) Markup('<em>foo & bar</em>') >>> Markup("<em>Hello</em> ") + "<foo>" Markup('<em>Hello</em> <foo>')
- classmethod escape(s: Any) markupsafe.Markup ¶
Эскейп строки. Вызывает
escape()
и гарантирует, что для подклассов возвращается правильный тип.
- striptags() str ¶
unescape()
разметку, удалить теги и нормализовать пробельные символы до одинарных пробелов.>>> Markup("Main » <em>About</em>").striptags() 'Main » About'
Мигание сообщения¶
- flask.flash(message: str, category: str = 'message') None ¶
Выводит сообщение до следующего запроса. Для того чтобы удалить промелькнувшее сообщение из сессии и показать его пользователю, шаблон должен вызвать
get_flashed_messages()
.Изменено в версии 0.3: Добавлен параметр category.
- Параметры
message – сообщение, которое будет выведено на экран.
category – категория для сообщения. Рекомендуются следующие значения:
'message'
для сообщений любого типа,'error'
для ошибок,'info'
для информационных сообщений и'warning'
для предупреждений. Однако в качестве категории может быть использована любая строка.
- flask.get_flashed_messages(with_categories: bool = False, category_filter: Iterable[str] = ()) Union[List[str], List[Tuple[str, str]]] ¶
Извлекает из сессии все промелькнувшие сообщения и возвращает их. Дальнейшие вызовы функции в том же запросе будут возвращать те же сообщения. По умолчанию возвращаются только сообщения, но если with_categories имеет значение
True
, возвращаемое значение будет представлять собой список кортежей в форме(category, message)
.Отфильтруйте промелькнувшие сообщения по одной или нескольким категориям, указав эти категории в category_filter. Это позволяет отображать категории в отдельных html-блоках. Аргументы with_categories и category_filter различны:
with_categories контролирует, возвращаются ли категории вместе с текстом сообщения (
True
дает кортеж, гдеFalse
дает только текст сообщения).category_filter отфильтровывает сообщения только до тех, которые соответствуют заданным категориям.
See Мигание сообщения for examples.
Изменено в версии 0.3: Добавлен параметр с_категориями.
Изменено в версии 0.9: Добавлен параметр category_filter.
- Параметры
with_categories – установите значение
True
, чтобы также получать категории.category_filter – filter of categories to limit return values. Only categories in the list will be returned.
Поддержка JSON¶
Flask использует simplejson
для реализации JSON. Поскольку simplejson предоставляется как стандартной библиотекой, так и расширением, Flask сначала попробует использовать simplejson, а затем вернется к модулю stdlib json. Кроме того, он будет делегировать доступ к кодировщикам и декодировщикам JSON текущего приложения для упрощения настройки.
Поэтому для начала вместо того, чтобы делать:
try:
import simplejson as json
except ImportError:
import json
Вместо этого вы можете сделать следующее:
from flask import json
Для примеров использования читайте документацию json
в стандартной библиотеке. Следующие расширения по умолчанию применяются к модулю JSON библиотеки stdlib:
Объекты
datetime
сериализуются как строки RFC 822.У любого объекта с методом
__html__
(например,Markup
) будет вызван этот метод, а затем возвращаемое значение будет сериализовано как строка.
Функция htmlsafe_dumps()
этого json-модуля также доступна в виде фильтра |tojson
в Jinja2. Обратите внимание, что в версиях Flask до Flask 0.10 необходимо отключить экранирование с помощью |safe
, если вы собираетесь использовать вывод |tojson
внутри тегов script
. Во Flask 0.10 и выше это происходит автоматически (но в любом случае включать |safe
безвредно).
<script type=text/javascript>
doSomethingWith({{ user.username|tojson|safe }});
</script>
Автоматическая сортировка ключей JSON
Переменная конфигурации JSON_SORT_KEYS
(Обработка конфигурации) может быть установлена в значение false, чтобы запретить Flask автоматическую сортировку ключей. По умолчанию сортировка включена, и вне контекста приложения сортировка включена.
Обратите внимание, что отключение сортировки ключей может вызвать проблемы при использовании HTTP-кэшей на основе контента и функции рандомизации хэшей в Python.
- flask.json.jsonify(*args: Any, **kwargs: Any) Response ¶
Serialize data to JSON and wrap it in a
Response
with the application/json mimetype.Uses
dumps()
to serialize the data, butargs
andkwargs
are treated as data rather than arguments tojson.dumps()
.Single argument: Treated as a single value.
Multiple arguments: Treated as a list of values.
jsonify(1, 2, 3)
is the same asjsonify([1, 2, 3])
.Keyword arguments: Treated as a dict of values.
jsonify(data=data, errors=errors)
is the same asjsonify({"data": data, "errors": errors})
.Passing both arguments and keyword arguments is not allowed as it’s not clear what should happen.
from flask import jsonify @app.route("/users/me") def get_current_user(): return jsonify( username=g.user.username, email=g.user.email, id=g.user.id, )
Will return a JSON response like this:
{ "username": "admin", "email": "admin@localhost", "id": 42 }
The default output omits indents and spaces after separators. In debug mode or if
JSONIFY_PRETTYPRINT_REGULAR
isTrue
, the output will be formatted to be easier to read.Изменено в версии 2.0.2:
decimal.Decimal
is supported by converting to a string.Изменено в версии 0.11: Added support for serializing top-level arrays. This introduces a security risk in ancient browsers. See security-json.
Добавлено в версии 0.2.
- flask.json.dumps(obj: Any, app: Optional[Flask] = None, **kwargs: Any) str ¶
Serialize an object to a string of JSON.
Takes the same arguments as the built-in
json.dumps()
, with some defaults from application configuration.- Параметры
obj – Объект для сериализации в JSON.
app – Use this app’s config instead of the active app context or defaults.
kwargs – Дополнительные аргументы, передаваемые в
json.dumps()
.
Изменено в версии 2.0.2:
decimal.Decimal
is supported by converting to a string.Изменено в версии 2.0:
encoding
is deprecated and will be removed in Flask 2.1.Изменено в версии 1.0.3:
app
можно передавать напрямую, а не требовать контекст приложения для настройки.
- flask.json.dump(obj: Any, fp: IO[str], app: Optional[Flask] = None, **kwargs: Any) None ¶
Serialize an object to JSON written to a file object.
Takes the same arguments as the built-in
json.dump()
, with some defaults from application configuration.- Параметры
obj – Объект для сериализации в JSON.
fp – File object to write JSON to.
app – Use this app’s config instead of the active app context or defaults.
kwargs – Extra arguments passed to
json.dump()
.
Изменено в версии 2.0: Writing to a binary file, and the
encoding
argument, is deprecated and will be removed in Flask 2.1.
- flask.json.loads(s: Union[str, bytes], app: Optional[Flask] = None, **kwargs: Any) Any ¶
Deserialize an object from a string of JSON.
Takes the same arguments as the built-in
json.loads()
, with some defaults from application configuration.- Параметры
s – Строка JSON для десериализации.
app – Use this app’s config instead of the active app context or defaults.
kwargs – Extra arguments passed to
json.loads()
.
Изменено в версии 2.0:
encoding
is deprecated and will be removed in Flask 2.1. The data must be a string or UTF-8 bytes.Изменено в версии 1.0.3:
app
можно передавать напрямую, а не требовать контекст приложения для настройки.
- flask.json.load(fp: IO[str], app: Optional[Flask] = None, **kwargs: Any) Any ¶
Deserialize an object from JSON read from a file object.
Takes the same arguments as the built-in
json.load()
, with some defaults from application configuration.- Параметры
fp – File object to read JSON from.
app – Use this app’s config instead of the active app context or defaults.
kwargs – Extra arguments passed to
json.load()
.
Изменено в версии 2.0:
encoding
is deprecated and will be removed in Flask 2.1. The file must be text mode, or binary mode with UTF-8 bytes.
- class flask.json.JSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)¶
The default JSON encoder. Handles extra types compared to the built-in
json.JSONEncoder
.datetime.datetime
anddatetime.date
are serialized to RFC 822 strings. This is the same as the HTTP date format.uuid.UUID
is serialized to a string.dataclasses.dataclass
is passed todataclasses.asdict()
.Markup
(or any object with a__html__
method) will call the__html__
method to get a string.
Assign a subclass of this to
flask.Flask.json_encoder
orflask.Blueprint.json_encoder
to override the default.- default(o: Any) Any ¶
Convert
o
to a JSON serializable type. Seejson.JSONEncoder.default()
. Python does not support overriding how basic types likestr
orlist
are serialized, they are handled before this method.
- class flask.json.JSONDecoder(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)¶
The default JSON decoder.
This does not change any behavior from the built-in
json.JSONDecoder
.Assign a subclass of this to
flask.Flask.json_decoder
orflask.Blueprint.json_decoder
to override the default.
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()
.
- register(tag_class: Type[flask.json.tag.JSONTag], force: bool = False, index: Optional[int] = None) None ¶
R
- Параметры
tag_class – t
force – перезаписать существующий тег. Если false (по умолчанию), то выдается предупреждение
KeyError
.index – индекс для вставки нового тега в порядок тегов. Полезно, когда новый тег является частным случаем существующего. Если
None
(по умолчанию), тег добавляется в конец порядка.
- Исключение
KeyError – если ключ тега уже зарегистрирован и
force
не является истиной.
- class flask.json.tag.JSONTag(serializer: flask.json.tag.TaggedJSONSerializer)¶
Базовый класс для определения тегов типов для
TaggedJSONSerializer
.- key: Optional[str] = None¶
Метка, которой нужно пометить сериализованный объект. Если
None
, этот тег используется только в качестве промежуточного шага при маркировке.
- tag(value: Any) Any ¶
Преобразуйте значение в допустимый тип JSON и добавьте вокруг него структуру тегов.
Let’s see an example that adds support for
OrderedDict
. Dicts don’t have an order in JSON, so
to handle this we will dump the items as a list of [key, value]
pairs. Subclass JSONTag
and give it the new key ' od'
to
identify the type. The session serializer processes dicts first, so
insert the new tag at the front of the order since OrderedDict
must
be processed before dict
.
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: Union[str, jinja2.environment.Template, List[Union[str, jinja2.environment.Template]]], **context: Any) str ¶
Выводит шаблон из папки шаблонов с заданным контекстом.
- Параметры
template_name_or_list – имя шаблона, который будет отображаться, или итерабельность с именами шаблонов, первый из которых будет отображен
context – переменные, которые должны быть доступны в контексте шаблона.
- flask.render_template_string(source: str, **context: Any) str ¶
Создает шаблон из заданной строки-источника шаблона с заданным контекстом. Переменные шаблона будут отображаться в автокодировке.
- Параметры
source – исходный код шаблона, который будет отображаться
context – переменные, которые должны быть доступны в контексте шаблона.
- flask.get_template_attribute(template_name: str, attribute: str) Any ¶
Загружает макрос (или переменную), экспортируемый шаблоном. Это можно использовать для вызова макроса из кода Python. Если, например, у вас есть шаблон с именем
_cider.html
со следующим содержимым:{% macro hello(name) %}Hello {{ name }}!{% endmacro %}
Вы можете получить к нему доступ из кода Python следующим образом:
hello = get_template_attribute('_cider.html', 'hello') return hello('World')
Добавлено в версии 0.2.
- Параметры
template_name – имя шаблона
attribute – имя переменной макроса, к которой нужно получить доступ
Конфигурация¶
- class flask.Config(root_path: str, defaults: Optional[dict] = None)¶
Работает точно так же, как dict, но предоставляет возможность заполнять его из файлов или специальных словарей. Существует два общих шаблона заполнения конфигурации.
E
app.config.from_pyfile('yourconfig.cfg')
В качестве альтернативы вы можете определить параметры конфигурации в модуле, который вызывает
from_object()
, или указать путь импорта к модулю, который должен быть загружен. Можно также указать ему использовать тот же модуль и предоставить значения конфигурации непосредственно перед вызовом:DEBUG = True SECRET_KEY = 'development key' app.config.from_object(__name__)
В обоих случаях (загрузка из любого файла Python или загрузка из модулей) в конфиг добавляются только ключи в верхнем регистре. Это позволяет использовать строчные значения в конфигурационном файле для временных значений, которые не добавляются в конфиг, или определить ключи конфига в том же файле, в котором реализуется приложение.
Вероятно, самый интересный способ загрузки конфигураций - из переменной окружения, указывающей на файл:
app.config.from_envvar('YOURAPPLICATION_SETTINGS')
В этом случае перед запуском приложения необходимо установить эту переменную окружения на файл, который вы хотите использовать. В Linux и OS X используйте оператор экспорта:
export YOURAPPLICATION_SETTINGS='/path/to/config/file'
В windows вместо этого используйте set.
- Параметры
root_path – путь, с которого производится относительное чтение файлов. Когда объект config создается приложением, это его
root_path
.defaults – необязательный словарь значений по умолчанию
- from_envvar(variable_name: str, silent: bool = False) bool ¶
Загружает конфигурацию из переменной окружения, указывающей на файл конфигурации. По сути, это просто сокращение с более приятными сообщениями об ошибках для этой строки кода:
app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])
- Параметры
variable_name – имя переменной среды
silent – установите значение
True
, если вы хотите, чтобы при отсутствии файлов происходил тихий отказ.
- Результат
True
if the file was loaded successfully.
- from_file(filename: str, load: Callable[[IO[Any]], Mapping], silent: bool = False) bool ¶
Update the values in the config from a file that is loaded using the
load
parameter. The loaded data is passed to thefrom_mapping()
method.import json app.config.from_file("config.json", load=json.load) import toml app.config.from_file("config.toml", load=toml.load)
- Параметры
filename – The path to the data file. This can be an absolute path or relative to the config root path.
load (
Callable[[Reader], Mapping]
whereReader
implements aread
method.) – A callable that takes a file handle and returns a mapping of loaded data from the file.silent – Ignore the file if it doesn’t exist.
- Результат
True
if the file was loaded successfully.
Добавлено в версии 2.0.
- from_mapping(mapping: Optional[Mapping[str, Any]] = None, **kwargs: Any) bool ¶
Updates the config like
update()
ignoring items with non-upper keys. :return: Always returnsTrue
.Добавлено в версии 0.11.
- from_object(obj: Union[object, str]) None ¶
Обновляет значения из заданного объекта. Объект может быть одного из следующих двух типов:
строка: в этом случае будет импортирован объект с таким именем
фактическая ссылка на объект: этот объект используется напрямую
Объектами обычно являются либо модули, либо классы.
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)
N
Y
S
- Параметры
obj – a
- from_prefixed_env(prefix: str = 'FLASK', *, loads: typing.Callable[[str], typing.Any] = <function loads>) bool ¶
Load any environment variables that start with
FLASK_
, dropping the prefix from the env key for the config key. Values are passed through a loading function to attempt to convert them to more specific types than strings.Keys are loaded in
sorted()
order.The default loading function attempts to parse values as any valid JSON type, including dicts and lists.
Specific items in nested dicts can be set by separating the keys with double underscores (
__
). If an intermediate key doesn’t exist, it will be initialized to an empty dict.- Параметры
prefix – Load env vars that start with this prefix, separated with an underscore (
_
).loads – Pass each string value to this function and use the returned value as the config value. If any error is raised it is ignored and the value remains a string. The default is
json.loads()
.
Добавлено в версии 2.1.
- from_pyfile(filename: str, silent: bool = False) bool ¶
U
- Параметры
filename – t
silent – установите значение
True
, если вы хотите, чтобы при отсутствии файлов происходил тихий отказ.
- Результат
True
if the file was loaded successfully.
Добавлено в версии 0.7: имя файла конфигурации. Это может быть либо абсолютное имя файла, либо имя относительно корневого пути.
- get_namespace(namespace: str, lowercase: bool = True, trim_namespace: bool = True) Dict[str, Any] ¶
Возвращает словарь, содержащий подмножество опций конфигурации, соответствующих указанному пространству имен/префиксу. Пример использования:
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' }
T
- Параметры
namespace – пространство имен конфигурации
lowercase – флаг, указывающий, должны ли ключи результирующего словаря быть в нижнем регистре
trim_namespace – флаг, указывающий, не должны ли ключи результирующего словаря включать пространство имен
Добавлено в версии 0.11.
Помощники потока¶
- flask.stream_with_context(generator_or_function: Union[Iterator, Callable[[...], Iterator]]) Iterator ¶
Контексты запросов исчезают, когда ответ запускается на сервере. Это сделано из соображений эффективности и для того, чтобы снизить вероятность утечки памяти при использовании плохо написанных промежуточных программ 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()))
Добавлено в версии 0.9.
Полезные внутренние компоненты¶
- class flask.ctx.RequestContext(app: Flask, environ: dict, request: Optional[Request] = None, session: Optional[SessionMixin] = None)¶
T
Не пытайтесь использовать этот класс напрямую, вместо этого используйте
test_request_context()
иrequest_context()
для создания этого объекта.Когда контекст запроса выскочит, он оценит все функции, зарегистрированные в приложении для выполнения разрыва (
teardown_request()
).Контекст запроса автоматически раскрывается в конце запроса для вас. В режиме отладки контекст запроса сохраняется при возникновении исключений, чтобы интерактивные отладчики имели возможность исследовать данные. В версии 0.4 это также может быть принудительно выполнено для запросов, не завершившихся неудачей, и вне режима
DEBUG
. При установке'flask._preserve_context'
вTrue
в среде WSGI контекст не будет раскрываться в конце запроса. Это используетсяtest_client()
, например, для реализации функции отложенной очистки.Это может оказаться полезным для unittests, где вам нужна информация из контекста, локально находящегося вокруг немного дольше. Убедитесь, что в такой ситуации вы сами правильно
pop()
стека, иначе ваши тесты будут утекать память.- copy() flask.ctx.RequestContext ¶
Создает копию данного контекста запроса с тем же объектом запроса. Это может быть использовано для перемещения контекста запроса в другой гринлет. Поскольку фактический объект запроса тот же самый, это не может быть использовано для перемещения контекста запроса в другой поток, если доступ к объекту запроса не заблокирован.
Добавлено в версии 0.10.
Изменено в версии 1.1: Вместо перезагрузки исходных данных используется текущий объект сессии. Это предотвращает указание flask.session на устаревший объект.
- match_request() None ¶
Может быть переопределен подклассом для получения информации о соответствии запроса.
- pop(exc: typing.Optional[BaseException] = <object object>) None ¶
Разворачивает контекст запроса и развязывает его. Это также вызовет выполнение функций, зарегистрированных декоратором
teardown_request()
.Изменено в версии 0.9: Добавлен аргумент exc.
- flask._request_ctx_stack¶
Внутренний
LocalStack
, в котором хранятся экземплярыRequestContext
. Обычно вместо стека следует обращаться к проксиrequest
иsession
. Обращение к стеку может быть полезным в коде расширения.Следующие атрибуты всегда присутствуют на каждом слое стека:
- app
активное приложение Flask.
- url_adapter
адаптер URL, который был использован для соответствия запросу.
- запрос
текущий объект запроса.
- сессия
активный объект сессии.
- g
объект со всеми атрибутами объекта
flask.g
.- вспышки
внутренний кэш для прошитых сообщений.
Пример использования:
from flask import _request_ctx_stack def get_session(): ctx = _request_ctx_stack.top if ctx is not None: return ctx.session
- class flask.ctx.AppContext(app: Flask)¶
Контекст приложения неявно связывает объект приложения с текущим потоком или гринлетом, аналогично тому, как
RequestContext
связывает информацию запроса. Контекст приложения также неявно создается, если создается контекст запроса, но приложение не находится поверх отдельного контекста приложения.
- flask._app_ctx_stack¶
Внутренний
LocalStack
, в котором хранятся экземплярыAppContext
. Обычно вместо стека следует обращаться к проксиcurrent_app
иg
. Расширения могут обращаться к контекстам на стеке как к пространству имен для хранения данных.Добавлено в версии 0.9.
- class flask.blueprints.BlueprintSetupState(blueprint: Blueprint, app: Flask, options: Any, first_registration: bool)¶
Временный объект-держатель для регистрации чертежа в приложении. Экземпляр этого класса создается методом
make_setup_state()
и в дальнейшем передается всем функциям обратного вызова register.- add_url_rule(rule: str, endpoint: Optional[str] = None, view_func: Optional[Callable] = None, **options: Any) None ¶
Вспомогательный метод для регистрации правила (и, по желанию, функции представления) в приложении. Конечная точка автоматически снабжается префиксом имени чертежа.
- app¶
ссылка на текущее приложение
- blueprint¶
ссылка на чертеж, который создал это состояние установки.
- first_registration¶
поскольку чертежи могут быть зарегистрированы в приложении несколько раз, и не все хотят быть зарегистрированными в нем несколько раз, этот атрибут может быть использован для выяснения того, был ли чертеж уже зарегистрирован в прошлом.
- options¶
словарь со всеми опциями, которые были переданы методу
register_blueprint()
.
- subdomain¶
Поддомен, для которого чертеж должен быть активен,
None
иначе.
- url_defaults¶
Словарь с параметрами URL по умолчанию, который добавляется к каждому URL, определенному в чертеже.
- url_prefix¶
Префикс, который должен использоваться для всех URL, определенных в чертеже.
Сигналы¶
Добавлено в версии 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.
Пример абонента:
def log_exception(sender, exception, **extra): sender.logger.debug('Got exception during processing: %s', exception) from flask import got_request_exception got_request_exception.connect(log_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¶
T
Пример абонента:
def close_db_connection(sender, **extra): session.close() from flask import appcontext_tearing_down appcontext_tearing_down.connect(close_db_connection, app)
T
- 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'
Добавлено в версии 0.10.
- flask.appcontext_popped¶
Этот сигнал отправляется, когда контекст приложения разворачивается. Отправителем является приложение. Обычно он совпадает с сигналом
appcontext_tearing_down
.Добавлено в версии 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)
Добавлено в версии 0.10.
- class signals.Namespace¶
Псевдоним для
blinker.base.Namespace
, если доступен blinker, иначе фиктивный класс, создающий поддельные сигналы. Этот класс доступен для расширений Flask, которые хотят обеспечить такую же систему отката, как и сама Flask.- signal(name, doc=None)¶
Создает новый сигнал для этого пространства имен, если доступен blinker, в противном случае возвращает поддельный сигнал, имеющий метод send, который ничего не сделает, но потерпит неудачу с
RuntimeError
для всех других операций, включая подключение.
Представления на основе классов¶
Добавлено в версии 0.7.
- class flask.views.View¶
Альтернативный способ использования функций представления. Подкласс должен реализовать
dispatch_request()
, который вызывается с аргументами представления из системы маршрутизации URL. Если предусмотреноmethods
, то методы не нужно передавать в методadd_url_rule()
явно:class MyView(View): methods = ['GET'] def dispatch_request(self, name): return f"Hello {name}!" app.add_url_rule('/hello/<name>', view_func=MyView.as_view('myview'))
Когда вы хотите украсить подключаемое представление, вам придется либо сделать это при создании функции представления (обернув возвращаемое значение
as_view()
), либо использовать атрибутdecorators
:class SecretView(View): methods = ['GET'] decorators = [superuser_required] def dispatch_request(self): ...
Декораторы, хранящиеся в списке декораторов, применяются один за другим при создании функции представления. Обратите внимание, что вы не можете не использовать декораторы, основанные на классах, поскольку они будут украшать класс представления, а не сгенерированную функцию представления!
- classmethod as_view(name: str, *class_args: Any, **class_kwargs: Any) Callable ¶
Преобразует класс в фактическую функцию представления, которая может быть использована с системой маршрутизации. Внутренне это генерирует функцию на лету, которая будет инстанцировать
View
при каждом запросе и вызывать методdispatch_request()
на нем.Аргументы, переданные в
as_view()
, передаются в конструктор класса.
- decorators: List[Callable] = []¶
Канонический способ декорирования представлений на основе классов - это декорирование возвращаемого значения функции as_view(). Однако это перемещает часть логики из объявления класса в место, где она подключается к системе маршрутизации.
Вы можете поместить один или несколько декораторов в этот список, и всякий раз, когда создается функция представления, результат автоматически декорируется.
Добавлено в версии 0.8.
- dispatch_request() Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication] ¶
Подклассы должны переопределить этот метод, чтобы реализовать фактический код функции представления. Этот метод вызывается со всеми аргументами из правила URL.
- class flask.views.MethodView¶
Представление, основанное на классе, которое диспетчеризирует методы запросов на соответствующие методы класса. Например, если вы реализуете метод
get
, он будет использоваться для обработки запросовGET
.class CounterAPI(MethodView): def get(self): return session.get('counter', 0) def post(self): session['counter'] = session.get('counter', 0) + 1 return 'OK' app.add_url_rule('/counter', view_func=CounterAPI.as_view('counter'))
- dispatch_request(*args: Any, **kwargs: Any) Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int], Tuple[Union[Response, str, bytes, Dict[str, Any], Iterator[str], Iterator[bytes]], int, Union[Headers, Dict[str, Union[str, List[str], Tuple[str, ...]]], List[Tuple[str, Union[str, List[str], Tuple[str, ...]]]]]], WSGIApplication] ¶
Подклассы должны переопределить этот метод, чтобы реализовать фактический код функции представления. Этот метод вызывается со всеми аргументами из правила URL.
Регистрация маршрутов 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)
Добавлено в версии 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)¶
Special subclass of the
AppGroup
group that supports loading more commands from the configured Flask app. Normally a developer does not have to interface with this class but there are some very advanced use cases for which it makes sense to create an instance of this. see Пользовательские сценарии.- Параметры
add_default_commands – если это значение равно True, то будут добавлены команды run и shell по умолчанию.
add_version_option – добавляет опцию
--version
.create_app – необязательный обратный вызов, которому передается информация о сценарии и возвращается загруженное приложение.
load_dotenv – Загружает ближайшие файлы
.env
и.flaskenv
для установки переменных окружения. Также изменит рабочий каталог на каталог, содержащий первый найденный файл.set_debug_flag – Установите флаг отладки приложения в зависимости от активной среды
Изменено в версии 1.0: Если он установлен, python-dotenv будет использоваться для загрузки переменных окружения из файлов
.env
и.flaskenv
.- get_command(ctx, name)¶
Учитывая контекст и имя команды, возвращает объект
Command
, если он существует, или возвращает None.
- list_commands(ctx)¶
Возвращает список имен подкоманд в том порядке, в котором они должны появляться.
- main(*args, **kwargs)¶
Это способ вызова сценария со всеми прелестями как приложения командной строки. После вызова приложение всегда будет завершено. Если этого не требуется, необходимо перехватить
SystemExit
.Этот метод также доступен при прямом вызове экземпляра
Command
.- Параметры
args – аргументы, которые должны быть использованы при разборе. Если они не указаны, то используется
sys.argv[1:]
.prog_name – имя программы, которое должно быть использовано. По умолчанию имя программы строится путем взятия имени файла из
sys.argv[0]
.complete_var – переменная окружения, управляющая поддержкой завершения bash. По умолчанию используется
"_<prog_name>_COMPLETE"
с именем prog_name в верхнем регистре.standalone_mode – поведение по умолчанию заключается в вызове сценария в автономном режиме. Click будет обрабатывать исключения и преобразовывать их в сообщения об ошибках, а функция никогда не вернется, но выключит интерпретатор. Если установить значение False, то они будут переданы вызывающей стороне, а возвращаемым значением этой функции будет возвращаемое значение
invoke()
.windows_expand_args – Expand glob patterns, user dir, and env vars in command line args on Windows.
extra – дополнительные аргументы ключевых слов передаются в конструктор контекста. Дополнительную информацию см. в разделе
Context
.
Изменено в версии 8.0.1: Added the
windows_expand_args
parameter to allow disabling command line arg expansion on Windows.Изменено в версии 8.0: When taking arguments from
sys.argv
on Windows, glob patterns, user dir, and env vars are expanded.Изменено в версии 3.0: Added the
standalone_mode
parameter.
- class flask.cli.AppGroup(name: Optional[str] = None, commands: Optional[Union[Dict[str, click.core.Command], Sequence[click.core.Command]]] = None, **attrs: Any)¶
Это работает аналогично обычному щелчку
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¶
Словарь с произвольными данными, которые могут быть связаны с этой информацией скрипта.
- load_app()¶
Загружает приложение Flask (если оно еще не загружено) и возвращает его. Многократный вызов этой функции приведет к тому, что будет возвращено уже загруженное приложение.
- flask.cli.load_dotenv(path=None)¶
Загрузите файлы «dotenv» в порядке старшинства для установки переменных окружения.
Если переменная env var уже установлена, она не перезаписывается, поэтому более ранние файлы в списке предпочтительнее более поздних.
Это не работает, если python-dotenv не установлен.
- Параметры
path – Загрузите файл в этом месте вместо поиска.
- Результат
True
если файл был загружен.
Изменено в версии 1.1.0: R
Изменено в версии 2.0: When loading the env files, set the default encoding to UTF-8.
Добавлено в версии 1.0.
- flask.cli.with_appcontext(f)¶
Обертывает обратный вызов так, чтобы он гарантированно выполнялся с контекстом приложения сценария. Если обратные вызовы зарегистрированы непосредственно в объекте
app.cli
, то они будут обернуты этой функцией по умолчанию, если она не отключена.
- flask.cli.pass_script_info(f: click.decorators.F) click.decorators.F ¶
Маркирует функцию так, что экземпляр
ScriptInfo
передается в качестве первого аргумента обратному вызову щелчка.
- flask.cli.run_command = <Command run>¶
Запустите локальный сервер разработки.
Этот сервер предназначен только для целей разработки. Он не обеспечивает стабильность, безопасность или производительность производственных серверов WSGI.
Перезагрузчик и отладчик включены по умолчанию, если FLASK_ENV=development или FLASK_DEBUG=1.
- flask.cli.shell_command = <Command shell>¶
Run an interactive Python shell in the context of a given Flask application. The application will populate the default namespace of this shell according to its configuration.
T