from django.shortcuts import redirect
from .models import Fcuser
def login_required(function):
def wrap(request, *args, **kwargs):
user = request.session.get('user')
if user is None or not user:
print('login required')
return redirect('/login')
return function(request, *args, **kwargs)
return wrap
def admin_required(function):
def wrap(request, *args, **kwargs):
user = request.session.get('user')
if user is None or not user:
return redirect('/login')
user = Fcuser.objects.get(email=user)
if user.level != 'admin':
print(user)
return redirect('/')
return function(request, *args, **kwargs)
return wrap
로그인을 하지 않으면 로그인 페이지로 redirect시키는 함수이다.
중간 중간 프린트문은 내가 확인하기 위해 집어넣었다. view함수에 프린트문을 넣으면 중간중간 변수안에 어떤 객체가 들어있는지 확인 할 수 있다. 이걸 이제서야 알게 되다니 너무 기쁘다.
if user.level != 'admin':
데이터 모델을 수정해서 level이라는 field를 넣어서 유저의 등급을 분류했다. 등급에따라 페이지에 접근을 제한하는 로직이다.
def wrap(request, *args, **kwargs):
인자를 이렇게 많이 받는 이유는 wrap한 함수이기 때문에 인자값을 맞춰주기 위해서다?
-데코레이터 개념 더 알고 수정하기-
from django.utils.decorators import method_decorator
from fcuser.decorators import admin_required
@method_decorator(admin_required, name='dispatch')
class ProductCreate(FormView):
template_name = 'register_product.html'
form_class = RegisterForm
success_url = '/product/'
@method_decorator
는 클래스에 데코레이터를 붙일 때 사용한다.@method_decorator
에 인자는 데코레이터로 쓸 함수 이름이다.(admin_required, name='dispatch')
name=dispatch
는 클래스에 데코레이터 붙일 때 사용한다.