viewset如何与rest方法对齐

时间:2015-06-23 20:29:50

标签: django api rest django-models django-rest-framework

我对DRF相对较新,但发现viewsets是一种用于编写RESTful API的惊人抽象技术。我很难将Viewsets与REST方法联系起来。让我们说我有一个Userprofiles的视图集,有人在客户端创建一个配置文件。

  1. 这应该发送PUT还是POST?
  2. 此请求应转到哪个网址,http://userhttp://user/new_id
  3. 如果我希望此配置文件仅供用户或管理员访问(所有CRUD操作),那么我应该在哪里处理代码以使其他人无法访问?
  4. 我应该创建新的权限吗?如果是,我应该在has_permission / has_object_permission中处理rest方法吗?
  5. 我已经完成了教程,并且知道权限/ mixin如何工作,但我无法在这里连接这些点。

1 个答案:

答案 0 :(得分:1)

1 /通常,POST用于创建新的,PUT用于更新。请参阅SimpleRouter上的文档,以了解各种类型的Http方法如何与Django后端中的各种操作保持一致。

2 /您会发现不同的情况需要不同的路由方法。如果你的是标准的,你可能想要像上面的例子一样使用SimpleRouter。在这种情况下,创建新用户将是对POST的{​​{1}}请求,更新用户将是对/user/的{​​{1}}请求。

3 /要限制对各种API方法的访问,您希望使用权限。您可以使用DRF Custom Permissions之一。我发现,一般情况下,如果您只想让用户访问他/她自己的个人资料,那么在视图中使用条件逻辑会更容易(即返回DRF PermissionDenied exception视图逻辑如果PUT不是该REST网址的pk。通常情况下,我使用了来自Django Braces/user/{{user_id}}/,这对于过滤用户非常有效权限。

4 /我猜上面的Django Braces mixin回答了这个问题。如果您要使用Django Braces,如果您想授予用户访问权限,那么您应该使用request.user.pk方法返回UserPassesTestMixin,否则test_func

希望这有帮助!我同意这些是DRF的难点部分,也许其中一些可以更有效地纳入源。祝你好运!