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)