2016-05-31 57 views
1

在rest框架中存在一些使用会话用户的方法,而不是pk和self.get_object()@detail_route视图?rest-framework @detail_route without pk

我想用request.user并没有在网址发送PK。

或者可能使用另一种装饰,而不是@detail_route ...

+3

使用@list_route代替。详细路线需要定义pk(按其余部分) – dkarchmer

+2

您是否可以扩展一些关于您的用例的知识,也许可以使用一些代码。 –

回答

0

在我的项目,我使用这两个普通的Django Django的和静止的框架,我下面用request.user

class ProfileRunCounts(generics.ListCreateAPIView): 

    def get(self, request, *args, **kwargs): 
     id = self.request.user 

更新意见后。

HttpRequest.user
从AuthenticationMiddleware:表示当前登录的用户AUTH_USER_MODEL的实例。如果用户当前未登录,则用户将被设置为AnonymousUser的实例。

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

APIView类在以下方面是从普通视图类不同:

请求传递给处理方法将是REST框架的要求的情况下,不Django的HttpRequest的实例。

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

+0

这些用于读写端点来表示模型实例的集合,所以仍然是相同的hacky感觉。 http://www.django-rest-framework.org/api-guide/generic-views/#listcreateapiview –

+0

这将是更合适的使用api_view –

1

这很难说,你想在第一时间存档什么。也许这更容易使用单独的视图,而不是这种情况下的视图集操作?例如,下面是目前唯一让登录的用户视图段管理他的账户:

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() 

给你的urlpatternspk在模式地址:

url(r'^users/me/$', CurrentUser.as_view()), 
+0

所以,它说什么“我”它可能是你想写的任何东西有?,似乎合法! 我不会允许用户删除自己的帐户,尽管 –

+1

@LuisSieira是的,任何你想要的网址。由于不需要捕获组,因此不需要。它不会*删除*它只是按照Django的建议将is_active设置为False。显然,你可以随意删除或更改这个逻辑,这只是一个例子。 – Igonato

+0

@LuisSieira我的回答有什么问题?这个答案也使用'self.request。用户' –