Django2.0-views(9)-类视图添加装饰器

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/abc666666_6/article/details/83994388

给类视图添加装饰器

给类添加装饰器,那么可以通过以下两种方式来实现:

装饰dispatch方法

from django.utils.decorators import method_decorator  # 给类的方法使用的装饰器

def login_required(func):  # 装饰器
    def wrapper(request,*args,**kwargs):
        if request.GET.get("username"):
            return func(request,*args,**kwargs)
        else:
            return redirect(reverse('index'))
    return wrapper


class IndexView(View):
    def get(self,request,*args,**kwargs):
        return HttpResponse("index")

    @method_decorator(login_required)  # 使用装饰器
    def dispatch(self, request, *args, **kwargs):
        super(IndexView, self).dispatch(request,*args,**kwargs)

直接装饰在整个类上

只用一个装饰器 @method_decorator(装饰器函数名,name='需要装饰的函数名')

使用多个装饰器 @method_decorator([装饰器名1,装饰器名2,...],name='需要装饰的函数名')

from django.utils.decorators import method_decorator

def login_required(func):  # 装饰器
    def wrapper(request,*args,**kwargs):
        if request.GET.get("username"):
            return func(request,*args,**kwargs)
        else:
            return redirect(reverse('login'))
    return wrapper


@method_decorator(login_required,name='dispatch')  # 选定需要装饰的函数名
class IndexView(View):
    def get(self,request,*args,**kwargs):
        return HttpResponse("index")

    #def dispatch(self, request, *args, **kwargs):
     #   super(IndexView, self).dispatch(request,*args,**kwargs)

猜你喜欢

转载自blog.csdn.net/abc666666_6/article/details/83994388