У меня возникла проблема, когда я назначил request.user
переменной с именем prior_user
, затем по существу аутентифицировал пользователя, а затем проверил, есть ли request.user != prior_user
. Я ожидал, что они не будут одинаковыми и что prior_user
должен содержать `AnonymousUser. К моему удивлению, они были такими же.
Пример кода:
prior_user = request.user # request object, obtained froma view
authenticate_user(request) # some function that authenticates
print prior_user.username != request.user.username # returns False i.e.they are the same!
Затем я обнаружил, что before_user фактически содержит экземпляр django.utils.functional.SimpleLazyObject, поэтому я предполагаю, что это своего рода ленивый тип типа поиска, т.е. значение before_user не просматривается до фактического использования. Если посмотреть на исходный код, я не могу это подтвердить.
Кто-нибудь с опытом django может рассказать мне, что происходит и зачем он нужен?
Это оставляет меня немного потрясенным, потому что обычное присваивание не работает так, как я ожидаю, и что еще в Django действует так? Я также не видел этого в docs.
Итак, любой, кто обладает сверхчеловеческими знаниями о джанго, может дать некоторую ясность?