在实现用户登录的时候,我们需要判断用户是否是管理员,加入有很多的管理员,那么我们就会出现很多次判断的代码,为了减少重复的代码,我们可以对判断的代码做一个封装,简单来说就是做一个装饰器,我们先来看看FBV是如何实现的:
def auth(func):
def inner(request,*args,**kwargs):
# 在这里进行判断
c = request.COOKIES.get('username')
if not c:
return redirect('/login/')
return func(request,*args,**kwargs)
return inner
@auth
def index(request):
c = request.COOKIES.get('username')
#page_count=int(request.COOKIES.get('page_count')) #拿到客户端设置的cookie,显示的内容数量
cur_page=int(request.GET.get('p',1)) #获取的p为字符串,直接转换为int
obj=Page(cur_page,len(LIST))
data = LIST[obj.start:obj.end] #[1:11]、[11:21]...
return render(request,'index.html',{'li':data,'page_html':obj.content,'c':c})
接着我们来看一下CBV该如何设置,现在我只想对get请求做判断,可以使用django为我们提供的一个方法:
def auth(func):
def inner(request,*args,**kwargs):
# 在这里进行判断
c = request.COOKIES.get('username')
if not c:
return redirect('/login/')
return func(request,*args,**kwargs)
return inner
from django import views
from django.utils.decorators import method_decorator
class Author(views.View):
@method_decorator(auth)
def get(self,request):
c = request.COOKIES.get('username')
return render(request,'index.html',{'c':c})
def post(self,request):
pass
使用@method_decorator(auth)的方式将我们上面的auth装饰器添加进去就可以了,这仅仅是对get请求做判断。现在如果请求方式很多,相对所有的方法都做认证,那么不要一一添加,可以在dispatch函数上修改,不管什么方式都会经过这个函数处理,前面说过有特别的用途,可以添加一些附加的功能,现在就是时候了:
from django import views
from django.utils.decorators import method_decorator
class Author(views.View):
@method_decorator(auth)
def dispatch(self, request, *args, **kwargs):
return super(Author,self).dispatch(request, *args, **kwargs)
def get(self,request):
c = request.COOKIES.get('username')
return render(request,'index.html',{'c':c})
def post(self,request):
pass
这样所有不管什么请求过来都会进行验证,如果觉得这种方法不太好的话,还有另外一种方式,我们可以直接把装饰器添加在类上:
from django import views
from django.utils.decorators import method_decorator
@method_decorator(auth,name='dispatch') #对Author中的dispatch方法惊醒装饰
class Author(views.View):
def get(self,request):
c = request.COOKIES.get('username')
return render(request,'index.html',{'c':c})
def post(self,request):
pass
声明:1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!