Метод init_every_request
Атрибут init_every_request применяется к классу представления,
унаследованному от View. По умолчанию его значение равно True,
и Flask создаёт новый экземпляр класса для каждого входящего запроса.
Если установить False, экземпляр создаётся один раз при регистрации
представления и переиспользуется для всех последующих запросов.
Такой режим полезен, когда в __init__ выполняется дорогая
инициализация, а состояние между запросами не изменяется.
Синтаксис
class MyView(View):
init_every_request = False
Пример
Давайте создадим представление, которое создаёт новый экземпляр на каждый запрос, и посмотрим на счётчик:
from flask import Flask
from flask.views import View
app = Flask(__name__)
class IndexView(View):
def dispatch_request(self):
return 'hello'
app.add_url_rule('/', view_func=IndexView.as_view('index'))
Результат выполнения кода для адреса /:
hello
Пример
Давайте отключим создание нового экземпляра на каждый запрос
и заведём счётчик в __init__:
from flask import Flask
from flask.views import View
app = Flask(__name__)
class CounterView(View):
init_every_request = False
def __init__(self):
self.count = 0
def dispatch_request(self):
self.count += 1
return str(self.count)
app.add_url_rule('/count', view_func=CounterView.as_view('count'))
Результат выполнения кода для первого запроса:
"1"
Результат выполнения кода для второго запроса:
"2"
Смотрите также
-
класс
View,
который лежит в основе классовых представлений -
метод
dispatch_request,
который обрабатывает входящий запрос -
метод
as_view,
который превращает класс в функцию-обработчик -
метод
get,
который обрабатывает GET-запрос в представлении