Когда именно вызывается Django2.2 View __init __ ()? Когда называются определения представлений? - PullRequest
0 голосов
/ 24 января 2020

Моя цель: чтобы c вызывали только один раз, когда запускается приложение (не весь проект django, а конкретное c приложение).

нижеследующее взято из документации * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * (100) * Конструктор.

1009 * *. Вызывается в URLconf; может содержать полезные дополнительные аргументы ключевых слов и другие вещи.

Если мои два экспериментальных представления - это подклассы View и некоторые другие классы, не являющиеся представлениями, и код выглядит примерно так, как показано ниже. Примечание: функция fun c () имеет некоторые важные побочные эффекты, и мне интересно, КОГДА и КАК ЧАСТО они называются. Я только знаю, что в случае MyView, забавный c будет вызываться каждый раз, когда класс Parent IS DEFINED, в случае MyView2, каждый раз, когда вызывается Parent2 или MyView2. Но я не могу сказать asp, когда это происходит (соответственно) - например, при каждом импорте, только один раз, при запуске приложения, каждый раз, когда достигается конечная точка. Может ли кто-нибудь немного объяснить мне эти два случая? :) this:

Поскольку распознаватель URL Django ожидает отправки запроса и связанных аргументов в вызываемую функцию, а не в класс, представления на основе классов имеют метод класса as_view (), который возвращает функцию, которая Может вызываться, когда приходит запрос на URL, соответствующий ассоциированному шаблону. Функция создает экземпляр класса, вызывает setup () для инициализации его атрибутов, а затем вызывает его метод dispatch ().

предполагает, что в случае MyView2 будет вызван fun c каждый раз, когда соответствующая конечная точка поражена. Это так? И как насчет MyView? В этом случае fun c вызывается всякий раз, когда определен родительский класс. Родительский класс не является представлением (хотя он определен в views.py), к нему не подключена конечная точка. Таким образом, он выполняется, вероятно, при импорте файла views.py. Я должен думать, что он будет вызван только один раз, когда приложение запущено - но вместо этого я получаю два забавных c звонка ...

class Parent:
    var = func()


class MyView(View, Parent):
    #... some usual stuff here

class Parent2:
    def __init__(self):
        self.var = func()


class MyView2(View, Parent2):
    #... some usual staff here
...