仅当DELETE请求由django-tastypie中的资源所有者进行时才删除资源

时间:2015-06-07 09:24:40

标签: django tastypie

我正在django-tastypie使用CommentResource api.py。我现在想限制它的行为,这样如果发送DELETE请求,只有在编写此注释的用户发送DELETE请求时才会删除注释。

所以,我必须覆盖方法delete_detail。但是这个方法的签名看起来不同herehere,特别是该方法所采用的参数。一个需要self, object_list, bundle,而另一个需要self, request, **kwargs。请解释这些个别参数的含义以及我的方法应该与答案有什么签名。

1 个答案:

答案 0 :(得分:1)

<强> 1。 delete_detail(self, request, **kwargs)

Resource.delete_detail(self, request, **kwargs)

此方法销毁单个资源/对象

它会调用obj_delete。如果资源被删除,则返回HttpNoContent (204 No Content)。如果资源不存在,请返回HttpNotFound (404 Not Found)

它有request作为参数,还有kwargs字典。

<强> 2。 delete_detail(self, object_list, bundle)

实施您自己的授权类时使用。

此方法采用两个参数object_list&amp; bundle

object_list是作为请求的一部分处理的对象的集合。过滤&amp;在此次通话之前,已经应用了对该套装的其他限制。

bundle是请求的填充Bundle对象。

根据文档,

  

对于* _detail方法,您可以访问   object_list(所以你知道给定的对象是否适合整体   设置),但你想要检查bundle.obj&amp;要么回来了   如果应该允许他们继续或提高未经授权,则为真   如果没有例外。

     

提升未授权将导致HTTP 401错误状态代码   响应。

此方法用于授权。如果有权继续提出异常,您将返回True

这与前者不同,因为您要删除对象/实例,但在此处您要授权并验证某人可以对您的API中的资源执行哪些操作。

因为在您自己的情况下,只有在撰写此评论的用户发送DELETE请求时您才需要删除评论使用第二种方法。用户有权仅删除其注释而不删除其他注释。 object_list这里将是从所有评论对象过滤后该用户的评论。