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
我试图覆盖 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