我正在django-tastypie
使用CommentResource
api.py
。我现在想限制它的行为,这样如果发送DELETE请求,只有在编写此注释的用户发送DELETE请求时才会删除注释。
所以,我必须覆盖方法delete_detail
。但是这个方法的签名看起来不同here和here,特别是该方法所采用的参数。一个需要self, object_list, bundle
,而另一个需要self, request, **kwargs
。请解释这些个别参数的含义以及我的方法应该与答案有什么签名。
答案 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
这里将是从所有评论对象过滤后该用户的评论。