2017-02-24 66 views
0

我有一個視圖集:我如何在ViewSet中使用基於類的視圖?

class UserViewSet(viewsets.ModelViewSet): 
    queryset = User.objects.all() 
    serializer_class = UserSerializer 

和適當的URL:

from .users.api.views import UserViewSet 

router = routers.DefaultRouter() 
router.register('users', UserViewSet, 'user') 

urlpatterns = [ 
    url(r'^v1/', include(router.urls)), 
] 

它的工作原理,但我要的用戶名,密碼驗證添加到UserViewSet:

@list_route(methods=['post'], permission_classes=[AllowAny]) 
def login(self, request): 
    #check login and password 
    #creare and return token 

五言我中可以通過我自己寫,但我感興趣,我如何使用rest_framework.authtoken.views.ObtainAuthToken來實現我的目標。

感謝您的幫助!

回答

0

根據文檔,您可以公開一個使用rest_framework.authtoken.view.obtain_auth_token作爲用戶名/密碼並返回令牌的API端點。有關更多詳細信息,請參閱rest framework Docs。你urls.py是這樣的:

from .users.api.views import UserViewSet 
from rest_framework.authtoken import views 

router = routers.DefaultRouter() 
router.register('users', UserViewSet, 'user') 

urlpatterns = [ 
    url(r'^v1/', include(router.urls)), 
    url(r'^v1/login, views.obtain_auth_token) 
] 

如果你真的想這個網址屬於你已經定義的UserViewSet,你將需要定義一個detail_route和手動調用authenticate,然後生成令牌對於已驗證的用戶(如果驗證成功)。我建議使用我描述的第一種模式,因爲它的代碼/定製較少。

+0

感謝您的回答。我已經完成了你的建議。我只是認爲可以在ViewSet中收集基於類的視圖。 –

+0

不確定「ViewSet中基於類的視圖」的含義。我在答案中提到,你可以嘗試定義你自己的定製細節路線,它可以做你正在談論的東西。但是這是很多額外的代碼,看起來並不需要。你這樣做的動機是什麼? – chukkwagon

相關問題