【问题标题】:tastypie overid create_response() methodsweetpie 覆盖 create_response() 方法
【发布时间】:2016-09-02 15:52:34
【问题描述】:

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

【问题讨论】:

    标签: python django tastypie


    【解决方案1】:

    您已经使用两个位置参数定义了方法create response()。然而,超类的定义是这样的:

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

    为什么这是一个问题是您的重写方法是使用您在定义中没有“接受”的关键字参数调用的。这就是**response_kwargs 的含义。这意味着这个函数可以有无限数量的关键字参数。您的定义可以为 0。因此,如果您将定义更改为 create_response(self, request, data, **kwargs)create_response(self, request, data, response_class=HttpResponse, **response_kwargs),您将摆脱这个问题。但你手上还有另一个。在 99% 的情况下,关键字参数必须传递给超类方法。因此,在大多数情况下,理想的版本是只复制定义和 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 2016-03-06
      • 2018-03-27
      • 2014-05-27
      • 2014-01-04
      • 2021-11-11
      相关资源
      最近更新 更多