inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Authentication 인증시스템 구축

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

279

퀀텀코더

작성한 질문수 37

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 도 똑같이 하셨는데 왜 하는지, 무엇을 위해 하는지 어떻게 작동하는지 모르겠습니다..ㅜㅜ..전에는

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

django docker python

답변 1

1

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 페이지로 유저를 돌려보내게 되는겁니다.

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

감사합니다-

강의에 나왔던 js 파일이 깃허브에 없습니다

1

79

1

모바일 디버깅, 반응형 레이아웃 4분48초 질문

0

57

1

decorator 관련질문입니다.

0

63

1

PasswordChangeView

0

104

2

로그아웃뷰 작동 관련 (2025년 3월)

1

138

1

실행에러질문

0

159

1

@login_required 데코레이터 사용시 리다이렉트는 어디서 참조하여 설정을 하는걸까요?

0

116

1

CacheBackend 관련 에러

0

181

1

21강 CreateView를 통한 회원가입 구현 질문

0

326

1

53강 disallowedhost

0

346

2

502 Bad Gateway

0

474

0

mariadb 접근권한 오류

0

546

1

logout 후 빈 화면으로 이동합니다 ㅠㅠ

0

461

2

로그아웃 후 빈 화면으로 이동

0

333

1

서버 운영 관련 질문 드립니다.(Unable to retirve...)

0

232

1

static/base.css파일을 인식을 못합니다

0

383

1

안녕하세요 19강 디버깅 설정 질문있습니다.

0

291

1

프로필 update편 질문있습니다.

0

380

1

수업질문

0

395

1

COOP error

0

531

1

61강 Dockerfile error

0

598

1

static안에 base.css 에서 정의한 클래스가 적용되지 않습니다.

0

491

1

static 파일 중 jpg 파일만 로드 불가

0

419

1

58강 static 파일 적용 안됨

0

547

1