본문 바로가기
개발일지/Django

Django - 장식자(Decorator) - (로그인관련)

by 개발에정착하고싶다 2023. 1. 14.

#1 개요

어떤 함수를 감싸주는 함수를 장식자(데코레이터)라고 부른다.

 

정말 많은 함수를 데코레이터로 이용할 수 있을것이고

어쩌면 모든 내장 함수에 대해서도 데코레이터로 활용할 수 있지 않을까 싶다.

하지만 그 중에서 오늘은 로그인 관련 데코레이터에 대해서 다뤄보려고 한다.


#2 예시코드

 

# 코드1

from django.contrib.auth.decorators import login_required
from django.shortcuts import render

@login_required
def protected_view1(request):
	return render(request, 'myapp/secret.html')
# 코드2

from django.contrib.auth.decorators import login_required
from django.shortcuts import render

def protected_view1(request):
	return render(request, 'myapp/secret.html')
   
protected_view2 = login_required(protected_view1)

코드 1과 코드 2는 같은 기능을 한다.

 

즉, 최종적으로는 코드1을 쓰든 2를 쓰든, protected_view1이라는 기능을 가지고 있는 함수를 사용하기 위해서

요청을 보내는 클라이언트가 있다면, 먼저 login을 했는지 안했는지를 login_required 기능으로써 필터링을 하고

로그인 여부에 따라서 다른 값을 리턴한다.


#3 종류

 

django.contrib.auth.decorators import <여기>

 

<여기>에 해당하는 것은

 

1. user_passes_test - 지정 함수가 False를 반환 하면 login_url로 redirect

2. login_required - 로그아웃 상황에서 login_url로 redirect

3. permission_required - 지정 퍼미션이 없을 때 login_url로 redirect


django.contrib.admin.views.decorators import <여기>

 

<여기>에 해당하는 것은

staff_member_required - staff member가 아닐 경우 login_url로 이동