개발_TIL

개발_TIL | 2022-06-07(34)

Hee94 2022. 6. 8. 01:13

▷ Django 에서 사용자 인증 여부를 확인하는 방법

   - Decorator 를 이용한 구현방법

    함수형뷰를 사용한다면 아래와 같이 간편하게 @login_required를 써주는 것 만으로도 모든 작업이 끝난다.

    하지만 클래스형으로 뷰를 구현한다면 이 방법은 사용할 수 없다.

from django.contrib.auth.decorators import login_required
 
@login_required
def my_view(request):  

   - Mixin 을 이용한 구현방법 (아직 시도해보지 못함)

    LoginRequiredMixin 클래스를 직접 구현해 클래스형 뷰에서 상속받아 사용할 수 있다.

    폼입력과 로그인 통제가 필요한 곳이면 매번 쓰는 기능인데 여간 귀찮고 번거로운게 아니라고 한다.

from django.contrib.auth.decorators import login_required
 
# 믹스인 구현
class LoginRequiredMixin(object):
    @classmethod
    def as_view(cls, **initkwargs):
        view = super(LoginRequiredMixin, cls).as_view(**initkwargs)
        return login_required(view)
 
# 구현한 믹스인 가져다 쓰기
class PhotoCreateView(LoginRequiredMixin, CreateView):
    model = Photo
    fields = ['album', 'title', 'image', 'description']
    success_url = reverse_lazy('photo:index')

   - Django 1.9부터 사용 할수 있는 만들어진 Mixin을 가져다 쓰는 방법

    @login_required 데코레이터를 쓰는 것 만큼이나 무척 간편해졌다.

    제네릭뷰(Generic View) 때문에 어쩔 수 없이 클래스형 뷰를 사용하는 사람에게 큰 편리함을 준다.

from django.contrib.auth.mixins import LoginRequiredMixin
 
# 바로 위 코드와 비교해보자. 아주 간단해졌다.
class MyView(LoginRequiredMixin, View):
    login_url = '/login/'
    redirect_field_name = 'redirect_to'