2017-01-14 6 views
1

標準のビューセットがあり、URLは/ api/users /と/ api/users/{pk} /のようになります。私は/ api/users/me /とpk(/ api/users/me/behavは/ api/users/5 /あなたのユーザーIDが5の場合のように動作するので、/ api/users/me/pkによってアクセスされる詳細ビューのように振る舞います。それはTokenAuthenticationと完全に(すべてのHTTPメソッド)SessionAuthenticationではなく、作品Django REST Framework - {pk} URLの静的エイリアス

def dispatch(self, request, *args, **kwargs): 
    if kwargs.get('pk') == 'me' and request.user: 
     kwargs['pk'] = request.user.pk 

    return super(UserViewSet, self).dispatch(request, *args, **kwargs) 

をそして:

私はこれを試してみました。 TokenAuthenticationで、それを返します:

curl -H "Authorization: Token f14b876aa54ebb7679330b88ea1c5b5ea4d693e9" http://127.0.0.1:8000/api/users/me/ 
{"detail":"Not found."} 

そして、派遣を()しても実行されないので、先に何かがそれを阻止しなければなりません。他のビュー(/ api/users /など)は正しく動作します。原因は何か、これをデバッグする方法は?

答えて

1

私はよりエレガントな何か使用して終了:オリジナルのアイデアはTokenAuthenticationでSessionAuthenticationで動作しますが、いないのはなぜ

def get_object(self): 
    if self.kwargs['pk'] == 'me': 
     return self.request.user 
    else: 
     return super().get_object() 

はまだ謎です。

関連する問題