1. ホーム
  2. python

Django Rest Framework で現在のユーザを返す

2023-08-14 23:08:15

質問

現在、Djangoを使用してAPIを開発しています。

しかし で、現在のユーザを返すビューを以下のエンドポイントで作りたいと思います。 /users/current/ .

これを行うために、私はリストビューを作成し、リクエストを行ったユーザーでクエリセットをフィルタリングしました。それは動作しますが、結果はリストであり、単一のオブジェクトではありません。ページ処理と組み合わせると、他のエンドポイントと比較して、結果があまりにも複雑で一貫性がないように見えます。

また、詳細ビューを作成し、クエリセットをフィルタリングしようとしましたが、DRF は、pk またはスラッグを提供しなかったと文句を言います。

何か思い当たることはありますか?

どのように解決するのですか?

このような場合、一般的なビューから脱却して、自分でビューを書くのが一番でしょう。

@api_view(['GET'])
def current_user(request):
    serializer = UserSerializer(request.user)
    return Response(serializer.data)

同じことをクラスベースのビューを使って以下のように行うこともできます...

class CurrentUserView(APIView):
    def get(self, request):
        serializer = UserSerializer(request.user)
        return Response(serializer.data)

もちろん、シリアライザーを使う必要はなく、ユーザーインスタンスから必要なフィールドを取り出すだけでも十分です。

@api_view(['GET'])
def current_user(request):
    user = request.user
    return Response({
        'username': user.username,
        'email': user.email,
        ...
    })

お役に立てれば幸いです。