Django: Отправка текущего зарегистрированного пользователя в виде JSON

Я хочу создать конечную точку GET, которая возвращает JSONResponse текущего вошедшего пользователя. В идеале это выглядело бы так:

{
    "username": "joe",
    "email": "joe@plainviewhcp.com",
    "first_name": "",
    "last_name": "",
    "last_login": "2021-09-17T17:11:00.039Z",
    "is_superuser": true,
    "is_active": true
}

(Обратите внимание, что я использую Django 3.2, а не Django REST API)

Для этого требуется сериализация текущего объекта пользователя, но сериализация одного объекта... непрозрачным в документации, и многие похожие вопросы имеют ответы, полученные 6 или более лет/две основные версии назад.

Я решил эту проблему, повторно запросив пользователя из объекта request.user и выделив первое поле. Это дает дополнительное преимущество - контроль над полями. Обратите внимание, что я уже проверил, чтобы убедиться, что пользователь вошел в систему в этот момент.

def api_current_user(request: HttpRequest):
    user = (
        User.objects.filter(pk=request.user.pk)
        .values(
            "username",
            "email",
            "first_name",
            "last_name",
            "last_login",
            "is_superuser",
            "is_active",
        )
        .first()
    )
    return JsonResponse(user)
Вернуться на верх