Объекты ресурсов создаются во время обработки запроса, и они не являются постоянными. Помните, что принципы REST гласят, что API должны быть без состояний . Если вы хотите хранить данные между запросами, вам следует использовать какую-то базу данных.
Самый простой способ доказать, что я сказал, - это использовать print (id(self))
в вашем обработчике get и несколько раз инициировать запрос. Вы увидите, что объект всегда меняется.
Теперь, если вас интересует Flask внутреннее , здесь мы go. Класс Resource является частью Flask -RESTtful , и в документации говорится следующее:
Ресурсы построены поверх Flask подключаемых представлений , предоставляя вам легкий доступ к нескольким методам HTTP, просто определяя методы на вашем ресурсе.
Ресурсы добавляются методом Resource.add_resource () , и он просто регистрирует базовый Вид объект.
if self.app is not None:
self._register_view(self.app, resource, *urls, **kwargs)
else:
self.resources.append((resource, urls, kwargs))
Resource._register_view () метод делает много сумасшедших вещей, но наиболее значимыми являются две строки:
resource_func = self.output(resource.as_view(endpoint, *resource_class_args, **resource_class_kwargs))
...
self.blueprint_setup.add_url_rule(url, view_func=resource_func, **kwargs)
Здесь вы можете видеть, что объект представления предоставляет обработчик это будет связано с путем URL. Этот обработчик будет вызываться каждый раз, когда к этому маршруту будет сделан HTTP-запрос.
Наконец, мы добрались до ядра, в методе View.as_view () , он создает функцию на лету, и эта функция будет представлять обработчик маршрута.
def view(*args, **kwargs):
self = view.view_class(*class_args, **class_kwargs)
return self.dispatch_request(*args, **kwargs)
Как видите, эта функция будет создавать новый объект каждый раз, когда должен быть отправлен запрос, и, как вы уже догадались, view_class
содержит ваш собственный класс для обработки запросов.