Автор оригинала: 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__ .
Посмотрите, как исчезла ошибка! Аналогично, мы создаем контекст запроса, используя метод 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 автоматически создает их внутри файла приложения.