• 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 the view_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, and OPTIONS 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 the endpoint() decorator.

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

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

If view_func has a required_methods attribute, those methods are added to the passed and automatic methods. If it has a provide_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 to OPTIONS 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. Use teardown_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]}. The scope key is the name of a blueprint the functions are active for, or None 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]}. The scope key is the name of a blueprint the functions are active for, or None 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() with methods=["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 with add_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}}}`. The scope key is the name of a blueprint the handlers are active for, or None for all requests. The code key is the HTTP status code for HTTPException, or None 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() with methods=["GET"].

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

get_send_file_max_age(filename: Optional[str]) Optional[int]

Used by send_file() to determine the max_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 of current_app. This defaults to None, 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 base HTTPException.

Добавлено в версии 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 if static_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 to template_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 file app.py where the Flask 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() with methods=["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() with methods=["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() with methods=["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 for url_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 and OPTIONS 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 default max_age for send_file(). The default is None, 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 at static_url_path if static_folder is set.

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

Безопасный файл 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]}. The scope key is the name of a blueprint the functions are active for, or None 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]}. The scope key is the name of a blueprint the functions are active for, or None 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 to FlaskClient.

Добавлено в версии 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]}. The scope key is the name of a blueprint the functions are active for, or None 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]}. The scope key is the name of a blueprint the functions are active for, or None 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. Use teardown_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]}. The scope key is the name of a blueprint the functions are active for, or None 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]}. The scope key is the name of a blueprint the functions are active for, or None 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() with methods=["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 with add_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}}}`. The scope key is the name of a blueprint the handlers are active for, or None for all requests. The code key is the HTTP status code for HTTPException, or None 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() with methods=["GET"].

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

get_send_file_max_age(filename: Optional[str]) Optional[int]

Used by send_file() to determine the max_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 of current_app. This defaults to None, 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 if static_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 to template_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’s json_decoder.

json_encoder: t.Optional[t.Type[JSONEncoder]] = None

Blueprint local JSON encoder class to use. Set to None to use the app’s json_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 file app.py where the Flask 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() with methods=["PATCH"].

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

post(rule: str, **options: Any) Callable[[flask.scaffold.F], flask.scaffold.F]

Shortcut for route() with methods=["POST"].

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

put(rule: str, **options: Any) Callable[[flask.scaffold.F], flask.scaffold.F]

Shortcut for route() with methods=["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 for url_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 for url_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 and OPTIONS 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 at static_url_path if static_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]}. The scope key is the name of a blueprint the functions are active for, or None 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]}. The scope key is the name of a blueprint the functions are active for, or None 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]}. The scope key is the name of a blueprint the functions are active for, or None 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]}. The scope key is the name of a blueprint the functions are active for, or None 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.

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.

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

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 base_url: str

Like url but without the query string.

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

alias of werkzeug.datastructures.ImmutableMultiDict

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 - это объект Werkzeug FileStorage.

В основном он ведет себя как стандартный объект 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.

Результат

объект запроса

property full_path: str

Requested path, including the query string.

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 host_url: str

The request URL scheme and host only.

property if_match: werkzeug.datastructures.ETags

Объект, содержащий все этаги в заголовке If-Match.

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

ETags

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.

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

ETags

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 is_secure: bool

True if the request was made with a secure protocol (HTTPS or WSS).

property json: Optional[Any]

The parsed JSON data if mimetype indicates JSON (application/json, see is_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 and loads functions that match the API of the built-in json module.

list_storage_class

alias of werkzeug.datastructures.ImmutableList

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 raises BadRequest.

Параметры

e – If parsing failed, this is the exception. It will be None if the content type wasn’t application/json.

origin

Хост, с которого был отправлен запрос. Установите access_control_allow_origin в ответе, чтобы указать, какие хосты разрешены.

parameter_storage_class

alias of werkzeug.datastructures.ImmutableMultiDict

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.

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

Range

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 or wss.

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, or None if not known.

shallow: bool

Set when creating the request object. If True, reading from the request body will cause a RuntimeException. Useful to prevent modifying the stream from middleware.

property stream: IO[bytes]

Если входящие данные формы не были закодированы известным mimetype, данные сохраняются в этом потоке в неизменном виде для последующего использования. В большинстве случаев лучше использовать data, что даст вам эти данные в виде строки. Поток возвращает данные только один раз.

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

Изменено в версии 0.9: Теперь этот поток всегда доступен, но может быть использован парсером формы позже. Ранее поток устанавливался только в том случае, если парсинг не выполнялся.

property url: str

The full request URL with the scheme, host, root path, path, and query string.

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 (атрибут исключения Werkzeug MethodNotAllowed), поскольку запрос никогда не был внутренне связан.

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

property user_agent: werkzeug.user_agent.UserAgent

The user agent. Use user_agent.string to get the header value. Set user_agent_class to a subclass of UserAgent 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, not form.

Изменено в версии 2.0: For GET requests, only args are present, not form.

view_args: Optional[Dict[str, Any]] = None

Диктат аргументов представления, которые соответствуют запросу. Если при подборе произошло исключение, это будет None.

property want_form_data_parsed: bool

True if the request method carries content. By default this is true if a Content-Type is sent.

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

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.

headers

Объект Headers, представляющий заголовки ответа.

status

Строка со статусом ответа.

status_code

Статус ответа в виде целого числа.

property data: Union[bytes, str]

Дескриптор, вызывающий get_data() и set_data().

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 returns None.

Unlike Request.get_json(), the result is not cached.

Параметры
  • force – Игнорируйте mimetype и всегда пытайтесь разобрать JSON.

  • silent – Замалчивать ошибки синтаксического анализа и возвращать вместо них None.

property is_json: bool

Проверьте, указывает ли mimetype на данные JSON, либо application/json, либо application/*+json.

Просмотр ключа конфигурации MAX_COOKIE_SIZE только для чтения.

See max_cookie_size in Werkzeug’s docs.

property mimetype: Optional[str]

mimetype (тип содержимого без charset и т.д.)

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.

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

Использует SESSION_COOKIE_DOMAIN, если он настроен, иначе возвращается к определению домена на основе SERVER_NAME.

После обнаружения (или если он вообще не установлен), SESSION_COOKIE_DOMAIN обновляется, чтобы избежать повторного запуска логики.

Возвращает True, если сессионная cookie должна быть httponly. В настоящее время возвращается только значение переменной конфигурации SESSION_COOKIE_HTTPONLY.

Returns the name of the session cookie.

Uses app.session_cookie_name which is set to SESSION_COOKIE_NAME

Возвращает путь, для которого cookie должен быть действительным. Реализация по умолчанию использует значение из конфигурационной переменной SESSION_COOKIE_PATH, если оно установлено, и возвращается к APPLICATION_ROOT или использует /, если оно None.

Возвращает 'Strict' или 'Lax', если cookie должен использовать атрибут SameSite. В настоящее время возвращается только значение параметра SESSION_COOKIE_SAMESITE.

Возвращает 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 using make_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() returns True.

Используется сессионными бэкендами для определения того, следует ли установить заголовок 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 using make_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() returns True.

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.

setdefault(key: str, default: Optional[Any] = None) Any

Вставка ключа со значением по умолчанию, если ключ отсутствует в словаре.

Возвращает значение для ключа, если ключ находится в словаре, иначе по умолчанию.

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.

property permanent: bool

Это отражает клавишу '_permanent' в дикте.

Уведомление

Ключ конфигурации 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 existing EnvironBuilder 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. Use TestResponse.request and request.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 called content_type instead of mimetype. This change was made for consistency with werkzeug.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')

See Построение URL-адресов.

Значения конфигурации 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 a ValueError is raised. The default behavior uses the same scheme as the current request, or PREFERRED_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 in environ, it is used, otherwise Werkzeug’s built-in wrapper is used. Alternatively, if the HTTP server supports X-Sendfile, configuring Flask with USE_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 be public, otherwise it will be no-cache to prefer conditional caching.

Изменено в версии 2.0: download_name replaces the attachment_filename parameter. If as_attachment=False, it is passed with Content-Disposition: inline instead.

Изменено в версии 2.0: max_age replaces the cache_timeout parameter. conditional is enabled and max_age is not set by default.

Изменено в версии 2.0: etag replaces the add_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 a ValueError 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 a PathLike 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 or attachment_filename.

Изменено в версии 0.12: attachment_filename is preferred over filename for MIME detection.

Изменено в версии 0.9: cache_timeout defaults to Flask.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 and conditional 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 the filename 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 &lt;em&gt;World&lt;/em&gt;!')

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

>>> class Foo:
...     def __html__(self):
...         return '<a href="/foo">foo</a>'
...
>>> Markup(Foo())
Markup('<a href="/foo">foo</a>')

This is a subclass of str. It has the same methods, but escapes their arguments and returns a Markup instance.

>>> Markup("<em>%s</em>") % ("foo & bar",)
Markup('<em>foo &amp; bar</em>')
>>> Markup("<em>Hello</em> ") + "<foo>"
Markup('<em>Hello</em> &lt;foo&gt;')
classmethod escape(s: Any) markupsafe.Markup

Эскейп строки. Вызывает escape() и гарантирует, что для подклассов возвращается правильный тип.

striptags() str

unescape() разметку, удалить теги и нормализовать пробельные символы до одинарных пробелов.

>>> Markup("Main &raquo;        <em>About</em>").striptags()
'Main » About'
unescape() str

Преобразование экранированной разметки обратно в текстовую строку. При этом сущности HTML заменяются символами, которые они представляют.

>>> Markup("Main &raquo; <em>About</em>").unescape()
'Main » <em>About</em>'

Мигание сообщения

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:

  1. Объекты datetime сериализуются как строки RFC 822.

  2. У любого объекта с методом __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, but args and kwargs are treated as data rather than arguments to json.dumps().

  1. Single argument: Treated as a single value.

  2. Multiple arguments: Treated as a list of values. jsonify(1, 2, 3) is the same as jsonify([1, 2, 3]).

  3. Keyword arguments: Treated as a dict of values. jsonify(data=data, errors=errors) is the same as jsonify({"data": data, "errors": errors}).

  4. 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 is True, 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.

Assign a subclass of this to flask.Flask.json_encoder or flask.Blueprint.json_encoder to override the default.

default(o: Any) Any

Convert o to a JSON serializable type. See json.JSONEncoder.default(). Python does not support overriding how basic types like str or list 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 or flask.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().

dumps(value: Any) str

Пометить значение и сбросить его в компактную строку JSON.

loads(value: str) Any

Загрузка данных из строки JSON и десериализация всех помеченных объектов.

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 не является истиной.

tag(value: Any) Dict[str, Any]

При необходимости преобразуйте значение в маркированное представление.

untag(value: Dict[str, Any]) Any

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

class flask.json.tag.JSONTag(serializer: flask.json.tag.TaggedJSONSerializer)

Базовый класс для определения тегов типов для TaggedJSONSerializer.

check(value: Any) bool

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

key: Optional[str] = None

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

tag(value: Any) Any

Преобразуйте значение в допустимый тип JSON и добавьте вокруг него структуру тегов.

to_json(value: Any) Any

Преобразуйте объект Python в объект, который является допустимым типом JSON. Метка будет добавлена позже.

to_python(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 the from_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] where Reader implements a read 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 returns True.

Добавлено в версии 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.

push() None

Привязывает контекст запроса к текущему контексту.

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 связывает информацию запроса. Контекст приложения также неявно создается, если создается контекст запроса, но приложение не находится поверх отдельного контекста приложения.

pop(exc: typing.Optional[BaseException] = <object object>) None

Открывает контекст приложения.

push() None

Привязывает контекст приложения к текущему контексту.

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.

methods: Optional[List[str]] = None

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

provide_automatic_options: Optional[bool] = None

Установка этого параметра отключает или принудительно включает автоматическую обработку опций.

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

Как правило, существует три способа определения правил для системы маршрутизации:

  1. Вы можете использовать декоратор flask.Flask.route().

  2. Вы можете использовать функцию flask.Flask.add_url_rule().

  3. Вы можете получить прямой доступ к базовой системе маршрутизации Werkzeug, которая отображается как flask.Flask.url_map.

Переменные части в маршруте могут быть указаны с помощью угловых скобок (/user/<username>). По умолчанию переменная часть в URL принимает любую строку без косой черты, однако можно указать и другой преобразователь, используя <converter:name>.

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

Имеются следующие преобразователи:

строка

принимает любой текст без косой черты (по умолчанию)

int

принимает целые числа

плоскость

как int, но для значений с плавающей точкой

путь

как по умолчанию, но также принимает косые черты

любой

соответствует одному из представленных пунктов

uuid

принимает строки UUID

Пользовательские конвертеры могут быть определены с помощью flask.Flask.url_map.

Вот несколько примеров:

@app.route('/')
def index():
    pass

@app.route('/<username>')
def show_user(username):
    pass

@app.route('/post/<int:post_id>')
def show_post(post_id):
    pass

Важная деталь, о которой следует помнить, - это то, как Flask работает с косой чертой. Идея заключается в том, чтобы каждый URL был уникальным, поэтому применяются следующие правила:

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

  2. Если правило не заканчивается косой чертой, а пользователь запрашивает страницу с косой чертой, выдается сообщение 404 not found.

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

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

@app.route('/users/', defaults={'page': 1})
@app.route('/users/page/<int:page>')
def show_users(page):
    pass

Это указывает, что /users/ будет URL для первой страницы, а /users/page/N будет URL для страницы N.

Если URL содержит значение по умолчанию, он будет перенаправлен в его более простую форму с помощью 301 редиректа. В приведенном выше примере /users/page/1 будет перенаправлен на /users/. Если ваш маршрут обрабатывает запросы GET и POST, убедитесь, что маршрут по умолчанию обрабатывает только GET, поскольку перенаправления не могут сохранять данные формы.

@app.route('/region/', defaults={'id': 1})
@app.route('/region/<int:id>', methods=['GET', 'POST'])
def region(id):
   pass

Вот параметры, которые принимают route() и add_url_rule(). Единственное различие заключается в том, что при параметре route функция представления определяется декоратором вместо параметра view_func.

правило

правило URL в виде строки

конечная точка

конечная точка для зарегистрированного правила URL. Flask сам предполагает, что имя функции представления является именем конечной точки, если это не указано явно.

view_func

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

умолчания

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

subdomain

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

**options

опции, которые должны быть переданы базовому объекту Rule. Изменением в Werkzeug является обработка опций метода. methods - это список методов, которыми должно быть ограничено это правило (GET, POST и т.д.). По умолчанию правило слушает только GET (и неявно HEAD). Начиная с версии Flask 0.6, OPTIONS добавляется неявно и обрабатывается стандартной обработкой запросов. Они должны быть указаны в качестве аргументов ключевых слов.

Просмотр опций функций

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

  • __name__: Имя функции по умолчанию используется в качестве конечной точки. Если конечная точка указана явно, то используется это значение. Кроме того, по умолчанию к этому значению будет добавлено имя чертежа, которое нельзя настроить из самой функции.

  • методы: Если методы не указаны при добавлении правила URL, Flask будет искать в самом объекте функции представления, существует ли атрибут methods. Если он есть, то информация о методах будет взята оттуда.

  • provide_automatic_options: если этот атрибут установлен, Flask будет принудительно включать или отключать автоматическую реализацию ответа HTTP OPTIONS. Это может быть полезно при работе с декораторами, которые хотят настраивать ответ OPTIONS на основе каждого вида.

  • required_methods: если этот атрибут установлен, Flask всегда будет добавлять эти методы при регистрации правила URL, даже если методы были явно переопределены в вызове route().

Полный пример:

def index():
    if request.method == 'OPTIONS':
        # custom options handling here
        ...
    return 'Hello World!'
index.provide_automatic_options = False
index.methods = ['GET', 'OPTIONS']

app.add_url_rule('/', index)

Добавлено в версии 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