Что это означает в документации django о представлениях на основе классов? - PullRequest
0 голосов
/ 03 ноября 2019

Новичок здесь. Когда я читаю документацию по Django, у меня появилась заметка, которую я не могу полностью понять.

В нем говорится: Примечание. Хотя ваш класс создается для каждого отправленного ему запроса, атрибуты класса, заданные через точку входа as_view (), настраиваются только один раз во время импорта ваших URL-адресов. Вот ссылка: https://docs.djangoproject.com/en/2.2/topics/class-based-views/intro/

Так какой из них лучше? Какое преимущество имеет каждый? Я пробовал и то и другое, и не вижу никакой разницы (уверен, это потому, что я недостаточно учел)

1 Ответ

0 голосов
/ 03 ноября 2019

Если вы передаете какие-либо значения в метод as_view (), которые могут измениться после запуска сервера, например, вызов некоторой функции или запрос к базе данных, возвращаемое значение которого может измениться после того, как некоторые пользователи используют веб-сайт, оно будет оцениваться толькоодин раз, в то время как URL-адреса загружены.

Допустим, вы передаете в текущем времени, как:

path('about/', GreetingView.as_view(greeting=timezone.now())),

Эта заметка просто говорит, что значение атрибута'reeting 'для GreetingView будетостается одинаковым для всех запросов, даже если сервер работает в течение месяца, поскольку timezone.now () вызывается только один раз.

Такие аргументы хороши для повторного использования класса View с минимальными изменениями. Это полностью зависит от вашего варианта использования. Например:

path('add-car/', AddView.as_view(form=AddCarForm)),
path('add-bus/', AddView.as_view(form=AddBusForm)),
...