강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

퀀텀코더님의 프로필 이미지
퀀텀코더

작성한 질문수

작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지

Authentication 인증시스템 구축

6:30초 쯤 def get함수 질문..

작성

·

272

0

def get함수가 뭘 의미하는 지 잘 모르겠어요..

def get(self, *args, **kwargs):
if self.requset.user.is_authenticated:
return super().get(*args, **kwargs)

else:
return HttpResponseRedirect(reverse('accountapp:login'))

if라면 즉 로그인이 되었다면 기존의 방식대로 하고

아니면(else)라면, 다시 

account/hello_world로 보내는 것 까진 알겠는데...

무엇을 기존의 방식대로 한다는 건지 모르겠습니다..

(def post 도 똑같이 하셨는데 왜 하는지, 무엇을 위해 하는지 어떻게 작동하는지 모르겠습니다..ㅜㅜ..전에는

와 닿았는데 이번엔 와 닿지 않는 느낌이예요.... )

퀴즈

63%나 틀려요. 한번 도전해보세요!

웹 애플리케이션에서 인증(Authentication) 및 인가(Authorization) 시스템이 중요한 주된 이유는 무엇일까요?

웹사이트의 디자인을 시각적으로 개선하기 위해

사용자 데이터를 안전하게 보호하고 권한 없는 접근을 막기 위해

데이터베이스의 조회 속도를 최적화하기 위해

서버의 하드웨어 성능을 자동으로 확장하기 위해

답변 1

1

Hyong Sok Park님의 프로필 이미지
Hyong Sok Park
지식공유자

안녕하세요.
질문 확인했습니다.

해당 get 메서드는 말 그대로 기존에 선언되어있던 메서드입니다.
이 때, 기존이라는 것은 부모 클래스에 선언되어있던 메서드라는거죠.

HTTP Get 프로토콜을 기반으로 요청을 받았을때,
어떤일을 하는지 이미 부모클래스인 UpdateView 혹은 DeleteView 에 적혀있다는 겁니다.

UpdateView, 즉 저희가 상속받는, django 에서 제공하는 부모클래스의 내용을 보겠습니다.

class UpdateView(SingleObjectTemplateResponseMixin, BaseUpdateView):
"""View for updating an object, with a response rendered by a template."""
template_name_suffix = '_form'

다른 내용은 없고 SingleObjectTemplateResponseMixin, BaseUpdateView를 다중 상속 받고 있습니다.
둘 중에 BaseUpdateView를 보겠습니다.

class BaseUpdateView(ModelFormMixin, ProcessFormView):
"""
Base view for updating an existing object.

Using this base class requires subclassing to provide a response mixin.
"""
def get(self, request, *args, **kwargs):
self.object = self.get_object()
return super().get(request, *args, **kwargs)

def post(self, request, *args, **kwargs):
self.object = self.get_object()
return super().post(request, *args, **kwargs)

내용을 보게 되면,
이런식으로 이미 get 이라는 메서드가 선언되어있는 것을 볼 수 있죠.

그런데, 저희가 UpdateView를 상속받아서 다시 get 메서드를 선언했다는 것은,
부모클래스에 작성된 내용을 덮어씌워버린다는 겁니다.

그런데, 이미 부모클래스 안에는 

    def get(self, request, *args, **kwargs):
self.object = self.get_object()
return super().get(request, *args, **kwargs)

이런식으로 작동하는 내용이 있는거죠.
그런데 저희는 이 내용을 삭제하는 게 아니라,
특정한 조건에서만 실행하고 싶은겁니다.

그 조건이라는 것은, 요청을 보내는 이 유저가 이 객체의 주인, 혹은 로그인 되어있는 유저라는 조건인거죠.

def get(self, *args, **kwargs):
if self.requset.user.is_authenticated:
return super().get(*args, **kwargs)
else:
return HttpResponseRedirect(reverse('accountapp:login'))

그래서 다시 이 코드를 보게 되면,
만약 해당 조건을 만족한다면,
부모 클래스에 작성했던 get 메서드를 그대로 호출하여 실행하고,

아니라면 아무것도 진행하지 않고 login 페이지로 유저를 돌려보내게 되는겁니다.

답변이 도움이 되셨길 바랍니다.

감사합니다-

퀀텀코더님의 프로필 이미지
퀀텀코더

작성한 질문수

질문하기