Spec-Zone.ru › Flask 2.2

Работа с оболочкой

Журнал изменений

Новая в версии 0.3.

Одна из причин, по которой все любят Python, — это интерактивная оболочка. Она в основном позволяет выполнять команды Python в реальном времени и немедленно получать результаты. Flask сам по себе не поставляется с интерактивной оболочкой, потому что ему не требуется предварительная настройка, просто импортируйте ваше приложение и начните экспериментировать.

Однако есть несколько полезных помощников, чтобы сделать работу в оболочке более приятной. Основная проблема с интерактивными сеансами консоли заключается в том, что вы не вызываете запрос, как это делает браузер, а это означает, что g, request и другие объекты недоступны. Но код, который вы хотите протестировать, может зависеть от них, так что что вы можете сделать?

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

В общем, рекомендуется сначала ознакомиться с Контекстом запроса.

Интерфейс командной строки

Начиная с Flask 0.11, рекомендуемый способ работы с оболочкой — команда flask shell, которая автоматизирует многие из этих задач. Например, оболочка автоматически инициализируется с загруженным контекстом приложения.

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

Создание контекста запроса

Самый простой способ создания правильного контекста запроса из оболочки — использование метода test_request_context, который создаёт контекст RequestContext:

>>> ctx = app.test_request_context()

Обычно вы использовали бы оператор with для активации этого объекта запроса, но в оболочке проще использовать методы push() и pop() вручную:

>>> ctx.push()

После этого вы можете работать с объектом запроса, пока не вызовете pop:

>>> ctx.pop()

Вызов до/после обработки запроса

Просто создав контекст запроса, вы все равно не запустили код, который обычно выполняется до запроса. Это может привести к тому, что ваша база данных станет недоступной, если вы подключаетесь к базе данных в обратном вызове перед запросом, или текущий пользователь не будет сохранён в объекте g и т. д.

Однако это можно легко сделать самостоятельно. Просто вызовите preprocess_request():

>>> ctx = app.test_request_context()
>>> ctx.push()
>>> app.preprocess_request()

Имейте в виду, что функция preprocess_request() может возвращать объект ответа, в этом случае просто проигнорируйте его.

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

>>> app.process_response(app.response_class())
<Response 0 bytes [200 OK]>
>>> ctx.pop()

Функции, зарегистрированные как teardown_request(), автоматически вызываются при извлечении контекста. Таким образом, это идеальное место для автоматической разборки ресурсов, необходимых для контекста запроса (например, подключений к базе данных).

Дальнейшее улучшение опыта работы с оболочкой

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

Просто поместите их в модуль (например, shelltools) и импортируйте их оттуда:

>>> from shelltools import *

© 2007–2022 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/2.2.x/shell/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API