
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() 메서드:
현재 URL에서 캡처된 파라미터를 기반으로 데이터베이스에서 객체를 조회하고, 객체가 존재하지 않을 경우 404 에러를 자동으로 반환한다.