tastypie 覆盖 create_response() 方法

tastypie overid create_response() method

我试图覆盖 tastypie create_response 因为在向用户发送响应之前我需要做一些验证。这是我的代码:

class MyNamespacedModelResource(NamespacedModelResource):
    def create_response(self , request , data):
        r = super(MyNamespacedModelResource , self).create_response(request , data , response_class=HttpResponse)
            # ... some treatements...
        return r

而且我有用户 NamespaceModelResource 之前工作正常。

当我尝试添加新用户(使用 post 方法)时,我得到了这个

error:

create_response() got an unexpected keyword argument 'response_class'

您已经使用两个位置参数定义了方法 create response()。但是,超级 class 定义如下所示:

def create_response(self, request, data, response_class=HttpResponse, **response_kwargs)

为什么会出现这个问题是因为您的重写方法是使用定义中没有 "accepted" 的关键字参数调用的。这就是 **response_kwargs 的意思。这意味着这个函数可以有无限数量的关键字参数。您的定义可以有 0。因此,如果您将定义更改为 create_response(self, request, data, **kwargs)create_response(self, request, data, response_class=HttpResponse, **response_kwargs),您将摆脱这个问题。但是你手上会有另一个。在 99% 的情况下,关键字参数必须传递给 super class 方法。所以在大多数情况下理想的版本是只复制定义和 super() 方法调用,在你的情况下看起来像这样:

class MyNamespacedModelResource(NamespacedModelResource):
    def create_response(self, request, data, response_class=HttpResponse, **response_kwargs):
        r = super(MyNamespacedModelResource , self).create_response(request, data, response_class=response_class, **response_kwargs)

        return r