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

3
我想给某个资源添加一个dispatch方法,这样我就可以在它上面使用包装器装饰器。 问题是它只能在CRUD操作上工作,并且不会进入“原始”端点上的dispatch方法:
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

当我使用patch请求时,它按预期工作,但在调用get_something_extra api时不起作用。

如何包装资源中的全部方法?

1个回答

0
一个解决方法是添加中间件:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接