2017-02-24 14 views
0

私はビューセットを持っている:それは作品ViewSetでクラスベースのビューを使用する方法は?

from .users.api.views import UserViewSet 

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

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

が、私はUserViewSetに、ユーザー名、パスワード認証方式を追加したい:

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

し、適切なURLを

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

讲义1コースのうち、私は私自身によってそれを書くことができますが、私はどのように私の目標のために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) 
] 

本当にこのURLはすでに定義したUserViewSetに属しているしたい場合は、detail_routeを定義する必要がありますし、手動でauthenticateを呼び出してから、トークンを生成します認証されたユーザーの場合(認証が成功した場合)私はそれが少ないコード/カスタマイズだとして説明した最初のパターンを使用することをお勧めします。

+0

お返事ありがとうございます。私はすでにあなたがお勧めする方法を行っています。私はちょうどそれがViewSetでクラスベースのビューを収集することが可能だと思った。 –

+0

"ViewSetのクラスベースのビュー"の意味が不明です。私はあなたが話していることをするかもしれない独自のカスタム詳細ルートを定義しようとすることができるという答えに言及しました。しかし、これは本当に必要ではないような余分なコードがたくさんあります。そのようにするためのあなたの動機は何ですか? – chukkwagon

関連する問題