이 코드가 실제로 어떻게 작동하는지 궁금합니다. 특히 setattr(request, user, LazyUser())
과 반대로 request.__class__.user = LazyUser()
의 기능은 무엇입니까? 죄송합니다. 무지한 질문이라면 요청에 속성을 추가하는 유사한 미들웨어 조각을 구현할 것이기 때문에 알고 싶습니다.Django LazyUser 코드는 어떻게 작동합니까?
코드는 다음과 같습니다. request.user
을 호출하면 사용자 개체가 반환됩니다.
class LazyUser(object):
def __get__(self, request, obj_type=None):
if not hasattr(request, '_cached_user'):
from django.contrib.auth import get_user
request._cached_user = get_user(request)
return request._cached_user
class AuthenticationMiddleware(object):
def process_request(self, request):
assert hasattr(request, 'session'), "The Django authentication middleware requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'."
request.__class__.user = LazyUser()
return None
업데이트 : 약간의 독서를하는, 나는 __get__
비트 그래서 제 질문은 제가 위에서 언급 한 바와 같이 setattr()
를 사용하여이 대를 할 이유를 아래로 비등, 어떻게 작동하는지 이해합니다. user
을 개체의 속성으로 인스턴스를 추가하는 것이 좋은 아이디어 인 이유는 무엇입니까?