1、CBV
1)、装饰类
from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from myadmin.permissions import check_permission
#name为被装饰的方法名 @method_decorator(login_required,name='dispatch')#或login_required(login_url = '/login/') class LoginRequiredMixin(object): def dispatch(self,request,*args,**kwargs): return super(LoginRequiredMixin,self).dispatch(request,*args,**kwargs)
#以下两者等同;login_required()在check_permission()之前处理请求 @method_decorator([login_required,check_permission],name='dispatch')#或元组 class LoginRequiredMixin(object): def dispatch(self,request,*args,**kwargs): return super(LoginRequiredMixin,self).dispatch(request,*args,**kwargs) @method_decorator(login_required,name='dispatch') @method_decorator(check_permission,name='dispatch') class LoginRequiredMixin(object): def dispatch(self,request,*args,**kwargs): return super(LoginRequiredMixin,self).dispatch(request,*args,**kwargs)
2)、装饰类方法
from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator class LoginRequiredMixin(object): @method_decorator(login_required) def dispatch(self,request,*args,**kwargs): return super(LoginRequiredMixin,self).dispatch(request,*args,**kwargs)
2、FBV
login_required可以直接装饰函数,如果用户为登录默认跳转到settings.LOGIN_URL,如:LOGIN_URL = 'login'。
也可以通过login_url自定义。
login_required
装饰器不会在用户上检查is_active
标志,但默认的AUTHENTICATION_BACKENDS
拒绝不活动的用户。