没有 pk 的 rest-framework @detail_route

Rod*_*ino 3 python django django-rest-framework

在休息框架中存在某种方式来使用会话用户而不是 pk 并self.get_object()@detail_route视图中使用?

我想使用request.user而不是在 url 中发送 pk。

或者也许使用另一个装饰器代替@detail_route......

Igo*_*ato 5

很难说你一开始想存档什么。也许在这种情况下使用单独的视图而不是视图集操作更容易?例如,这里是一个视图片段,让当前登录的用户管理他的帐户:

class CurrentUser(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = UserSerializer

    def get_object(self):
        return self.request.user

    def perform_destroy(self, instance):
        instance.is_active = False
        instance.save()
Run Code Online (Sandbox Code Playgroud)

将此添加到您的urlpatternswithoutpk模式中:

    url(r'^users/me/$', CurrentUser.as_view()),
Run Code Online (Sandbox Code Playgroud)


Kis*_*war 0

在我的项目中,我使用普通 Django 和 Django-rest-framework,并且使用request.user如下。

\n\n
class ProfileRunCounts(generics.ListCreateAPIView):\n\n    def get(self, request, *args, **kwargs):\n        id = self.request.user\n
Run Code Online (Sandbox Code Playgroud)\n\n

评论后更新。

\n\n
\n

HttpRequest.user
\n 来自 AuthenticationMiddleware:代表当前登录用户的 AUTH_USER_MODEL 实例。如果用户当前未登录\xe2\x80\x99,则用户将被设置为 AnonymousUser 的实例。

\n\n

REST框架的Request类扩展了标准的HttpRequest,增加了对REST框架灵活的请求解析和请求认证的支持。

\n\n

APIView 类与常规 View 类有以下不同之处:

\n\n

传递给处理程序方法的请求将是 REST 框架的 Request 实例,而不是 Django 的 HttpRequest 实例。

\n
\n\n

通过以上文档摘录,我相信用户对象始终可以在请求中使用。\n有时它在self.request.user,有时它在request.user.

\n