在rest框架中存在一些使用會話用戶的方法,而不是pk和self.get_object()
在@detail_route
視圖?rest-framework @detail_route without pk
我想用request.user
並沒有在網址發送PK。
或者可能使用另一種裝飾,而不是@detail_route
...
在rest框架中存在一些使用會話用戶的方法,而不是pk和self.get_object()
在@detail_route
視圖?rest-framework @detail_route without pk
我想用request.user
並沒有在網址發送PK。
或者可能使用另一種裝飾,而不是@detail_route
...
在我的項目,我使用這兩個普通的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
。
這些用於讀寫端點來表示模型實例的集合,所以仍然是相同的hacky感覺。 http://www.django-rest-framework.org/api-guide/generic-views/#listcreateapiview –
這將是更合適的使用api_view –
這很難說,你想在第一時間存檔什麼。也許這更容易使用單獨的視圖,而不是這種情況下的視圖集操作?例如,下面是目前唯一讓登錄的用戶視圖段管理他的賬戶:
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()
給你的urlpatterns
不pk
在模式地址:
url(r'^users/me/$', CurrentUser.as_view()),
所以,它說什麼「我」它可能是你想寫的任何東西有?,似乎合法! 我不會允許用戶刪除自己的帳戶,儘管 –
@LuisSieira是的,任何你想要的網址。由於不需要捕獲組,因此不需要。它不會*刪除*它只是按照Django的建議將is_active設置爲False。顯然,你可以隨意刪除或更改這個邏輯,這只是一個例子。 – Igonato
@LuisSieira我的回答有什麼問題?這個答案也使用'self.request。用戶' –
使用@list_route代替。詳細路線需要定義pk(按其餘部分) – dkarchmer
您是否可以擴展一些關於您的用例的知識,也許可以使用一些代碼。 –