Django框架中CBV和FBV的装饰器,用户验证登录

鳄鱼君

发表文章数:525

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python教程 » Django框架中CBV和FBV的装饰器,用户验证登录

在实现用户登录的时候,我们需要判断用户是否是管理员,加入有很多的管理员,那么我们就会出现很多次判断的代码,为了减少重复的代码,我们可以对判断的代码做一个封装,简单来说就是做一个装饰器,我们先来看看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

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Django框架中CBV和FBV的装饰器,用户验证登录》 发布于2020-04-24

分享到:
赞(1) 赏杯咖啡

评论 抢沙发

5 + 4 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册