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)

最新更新