Django drf 免登陆设置login_exempt

一、为类视图添加装饰器login_exempt

在进入dispatch方法之前添加装饰器:即在view方法之后, 在调用dispatch方法之前添加装饰器.

1、因为login_exempt是为函数准备的装饰器,所以类视图无法直接使用,需要使用method_decorator将其转换为适合类视图使用的装饰器。name='dispatch'代表:为视图中的所有请求方法添加装饰器

@method_decorator(login_exempt, name='dispatch')

 2、将装饰器放在dispatch方法之上,仍然表示为视图中的所有请求方法添加装饰器

@method_decorator(login_exempt)
    def dispatch(self, request, *args, **kwargs):
        return super(TicketAPIModelViewSet, self).dispatch(request, *args, **kwargs)

二、重写as_view方法:

as_view()的执行结果加装饰器, 由于as_view()方法返回的是一个view函数,在调用view函数之前进行装饰, 就相当于给每一个视图添加了装饰器, 因为它是一个视图的入口, 所以每次进入view函数之前都会调用一次!
@classmethod
    def as_view(cls, actions=None, **initkwargs):
        # 登录豁免
        view = super(TicketAPIModelViewSet, cls).as_view(actions=actions, **initkwargs)
        return login_exempt(view)

原文地址:https://www.cnblogs.com/wangyingblock/p/11975235.html