[강의 공부] 15. CBV에서 get/post 요청 구분하여 확장하기

단간단간·2024년 5월 2일
0
post-thumbnail

class view에서 get/post 요청 구분하는 방법 예시
아래 소스코드의 get(), post() 함수 참고

< view.py >

class AccountUpdateView(UpdateView):
    model = User
    context_object_name = 'target_user'
    form_class = AccountUpdateForm
    success_url = reverse_lazy('accountapp:hello_world')
    template_name = 'accountapp/update.html'
	
    # GET Method
    def get(self, *args, **kwargs):
    	# 로그인 상태 여부 확인 / 요청한 유저 객체와 로그인된 유저 객체가 동일한지 확인
        if self.request.user.is_authenticated and self.get_object() == self.request.user:
        	# UpdateView의 Get 함수를 그대로 따름
            return super().get(*args, **kwargs)
        else:
        	# 403 에러코드 리턴 (권한이 옳지 않은 경우)
            return HttpResponseForbidden("허용되지 않는 접근입니다.")
	
    # POST Method
    def post(self, *args, **kwargs):
        if self.request.user.is_authenticated and self.get_object() == self.request.user:
            return super().post(*args, **kwargs)
        else:
            return HttpResponseForbidden("허용되지 않는 접근입니다.")

참고)
self.get_object() 메서드:

  • Django의 클래스 기반 뷰(Class-Based View, CBV)에서 self.get_object() 메소드는 주로 상세 조회 페이지(DetailView)나 수정 페이지(UpdateView), 삭제 페이지(DeleteView)와 같이 특정 모델 인스턴스에 접근이 필요한 경우에 사용된다.
  • 이 메소드는 현재 URL에서 캡처된 파라미터를 기반으로 데이터베이스에서 객체를 조회하고, 객체가 존재하지 않을 경우 404 에러를 자동으로 반환한다.
profile
simple is best

0개의 댓글