如何在Django Tastypie中包装自定义端点



我想向某个资源添加一个调度方法,这样我就可以在它上使用包装装饰器。问题是,它只适用于CRUD操作,而不会进入"原始"端点上的调度方法:

class SomeResource(SomeBaseResource):
class Meta(...): ...

def get_something_extra(self, request, **kwargs):
...
def patch_detail(self, request, **kwargs):
...

基础资源:

class SomeBaseResource(ModelResource):
class Meta(...): ...

# the wrapper
@decorator_to_wrap_all_methods_with(...)
def dispatch(self, request_type, request, **kwargs):
logger.info('Enter')
response = super(SomeBaseResource, self).dispatch(request_type, request, **kwargs)
logger.info('Exit')
return response

因此,当我使用补丁请求时,它按预期工作,但不会调用get_something_extraapi。

如何在资源中包装所有方法?

解决方法是添加中间件:

MIDDLEWARE = (
'my.basic.BaseMiddleware',
...
)
class BaseMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
@decorator_to_wrap_all_methods_with(...)
def __call__(self, request):
response = self.get_response(request)
return response

最新更新