J'ai rencontré un problème lorsque j'ai assigné request.user
à une variable appelée prior_user
puis a essentiellement authentifié l'utilisateur, puis a vérifié pour voir si request.user != prior_user
. Je m'attendais à ce qu'ils ne soient pas les mêmes et que prior_user
doit contenir "AnonymousUser". À ma grande surprise, ils étaient identiques.
Exemple de code :
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!
J'ai ensuite découvert que prior_user contient en fait une instance de django.utils.functional.SimpleLazyObject. Je suppose donc qu'il s'agit d'une sorte de recherche paresseuse, c'est-à-dire que la valeur de prior_user n'est pas recherchée avant d'être réellement utilisée. En regardant le code source, je ne peux pas le confirmer.
Quelqu'un ayant une expérience de django peut me dire ce qui se passe et pourquoi c'est nécessaire ?
Cela me laisse un peu perplexe, car l'instruction d'affectation habituelle ne fonctionne pas comme je l'attends et qu'est-ce qui se passe d'autre dans Django qui se comporte ainsi ? Je n'ai pas non plus vu cette description dans la docs .
Alors, quelqu'un ayant une connaissance super humaine de django peut apporter un peu de clarté ?