一、为类视图添加装饰器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)