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

#json #django #api

Вопрос:

Я хотел бы создать конечную точку 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 или более лет/две основные версии назад.

Ответ №1:

Я решил эту проблему, повторно запросив пользователя у 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)