2016-05-31 56 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。用戶' –