[REAL Python – Django] – “Django – Post 작성 통합 구현하기(1)”
[REAL Python – Django] – “Django – Post 작성 통합 구현하기(1)”
5월 21, 2022
요구 사항 정리
스태프 이상의 권한을 가진 사람 글쓰기 가능하도록 하기, 저자 자동으로 추가하기
이전에 작성했던 글의 약간 업그레이드 버전입니다. 조금 더 이해한 내용을 바탕으로 정리하는 중!
class PostCreateView(LoginRequiredMixin, UserPassesTestMixin, CreateView):
template_name = 'blog/post_form.html'
success_url = '/blog/'
form_class = PostForm
def test_func(self):
return self.request.user.is_superuser or self.request.user.is_staff
def form_valid(self, form):
current_user = self.request.user
# 현재 사용자가 로그인하였고, 스태프 권한이나 최고 관리자 권한을 가졌다면
if current_user.is_authenticated and (current_user.is_staff or current_user.is_superuser):
form.instance.author = current_user # 글쓴이 = 현재 유저 자동으로 등록되도록 하기
response = super(PostCreateView, self).form_valid(form)
return response
else:
return redirect('/blog/')
위의 코드를 작성함으로서 해결할 수 있습니다.
이전의 포스트에서도 그랬듯이 LoginRequiredMixin, UserPassesTestMixin 의 두 가지 믹스인이 들어간 것을 볼 수 있습니다. 먼저 test_func
란 무엇인고 하니..
먼저 UserPassesTestMixin은 test_func()가 False를 반환한다면 권한 에러와 함께 요청을 거절한다는 설명이 보입니다. test_func를 오버라이딩해 줌으로서 권한이 있는지 혹은 없는지를 검증할 수 있게끔 하는 것이죠!
그렇기에, return self.request.user.is_superuser or self.request.user.is_staff
라는 코드로 현재 유저가 최고 관리자이거나, 스태프 권한을 가지고 있음을 True&False로 반환하는 코드를 작성한 것입니다. 실제로..
마찬가지로 is_staff 또한 확인해 보면 불리언 필드입니다. 아무튼, 우리는 test_func 를 재정의함으로서 스태프 이상의 권한을 가지지 않은 사람은 권한 에러가 발생하게끔 처리하였습니다.