Рубрики
Без рубрики

Контекст колбы – Демистификация Контекстов приложений и запросов

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

Автор оригинала: Pankaj Kumar.

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

Что такое контекст колбы?

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

В Flask вы, возможно, заметили, что представления Flask не принимают объект запроса в качестве аргумента и все еще могут их использовать. Это может быть возможно только в том случае, если объекты запроса являются глобальными объектами, верно?

Ну, ответ таков: Нет.

Если объекты запроса должны быть глобальными, то Flask не будет различать запросы, которые одновременно попадают на сервер. Но это не так; веб-сайты обрабатывают несколько запросов одновременно. Тогда как это возможно??

Ну, Flask использует Контекст , чтобы сделать определенные переменные временно глобальными для конкретного объекта запроса, чтобы представления могли получить доступ к этим переменным для возврата выходных данных.

Контекст колбы бывает двух типов:

  • Контекст приложения
  • Контекст запроса

Контексты применения в колбе

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

Контекст приложения предоставляет (т. Е. Временно делает их глобальными) объекты, такие как current_app и переменная g .

1. current_approaches

current_app относится к экземпляру, обрабатывающему запросы. То есть это относится к приложению, на котором работает колба.

2. переменная g

Здесь g означает Глобальный и используется для хранения данных, таких как данные базы данных и т. Д. Во время обработки запросов временно .

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

Flask автоматически нажимает(или активирует) контекст приложения при поступлении конкретного запроса и удаляет его после обработки запроса.

Контекст запроса в колбе

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

Контекст запроса предоставляет такие объекты, как запросы и сеансы.

1. Запросы

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

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

2. Сеансы

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

Следовательно, как только контекст запроса становится активным, любое представление внутри приложения может получить доступ к объектам (запросу и сеансам), предоставленным им.

Как и ApplicationContext, Flask также автоматически нажимает(или активирует) контекст запроса при поступлении конкретного запроса и удаляет его после обработки запроса.

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

Вручную толкая контекст колбы в оболочку.

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

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

Однако, если вы попытаетесь использовать объекты вне функции представления или в оболочке python, как показано ниже:

from flask import Flask, request
request.method
Ошибка

Вы получите сообщение об ошибке. То же самое с объектами контекста приложения

from flask import Flask, current_app
current_app.name
Ошибка

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

Здесь мы создаем контекст приложения с помощью метода app_context() экземпляра Flask

Запустите код:

from flask import Flask, current_app
app = Flask(__name__)
appli_context = app.app_context()
current_app.name

Здесь

  • Мы объявляем объект Flask – app.
  • Мы нажимаем/создаем контекст приложения с помощью app.app_context()
  • current_app теперь активен и связан с файлом __name__ , т. е. с самим файлом __main__ .
AppContext

Посмотрите, как исчезла ошибка! Аналогично, мы создаем контекст запроса, используя метод test_request_context() экземпляра Flask

from flask import Flask, request
app = Flask(__name__)
req = app.test_request_context()
req.request

И здесь тоже

  • Мы объявляем объект Flask – app.
  • Мы нажимаем/создаем контекст запроса с помощью app.test_request_context()
  • Объект request теперь активен и связан с веб-сайтом хоста, т. Е. ” http://loalhost/ ” сам файл.
Запрос

И, следовательно, мы получаем правильный безошибочный вывод.

Вывод

Вот и все, ребята !! Все дело было в Контекстах в Колбе. Вам не нужно сильно беспокоиться об этом, так как Flask автоматически создает их внутри файла приложения.