You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django 3.2 不使用Django REST API实现GET接口返回当前登录用户JSON

以下方案适配Django 3.2版本,无需依赖Django REST Framework,仅通过原生功能即可实现需求。

实现步骤

1. 定义用户序列化方法

手动映射需要返回的用户字段,同时处理datetime类型的last_login字段,转换为符合要求的ISO格式字符串:

def serialize_user(user):
    return {
        "username": user.username,
        "email": user.email,
        "first_name": user.first_name,
        "last_name": user.last_name,
        "last_login": user.last_login.isoformat() if user.last_login else None,
        "is_superuser": user.is_superuser,
        "is_active": user.is_active
    }

2. 实现GET视图

使用login_required装饰器限制仅登录用户可访问,同时只响应GET请求:

from django.http import JsonResponse
from django.contrib.auth.decorators import login_required

@login_required
def get_current_user(request):
    if request.method != "GET":
        return JsonResponse({"error": "请求方法不允许"}, status=405)
    user_data = serialize_user(request.user)
    return JsonResponse(user_data)

如果你希望未登录时直接返回JSON格式的错误提示而不是跳转到登录页,可以去掉login_required装饰器,在视图开头增加身份校验逻辑:

def get_current_user(request):
    if not request.user.is_authenticated:
        return JsonResponse({"error": "请先登录"}, status=401)
    if request.method != "GET":
        return JsonResponse({"error": "请求方法不允许"}, status=405)
    user_data = serialize_user(request.user)
    return JsonResponse(user_data)

3. 配置路由

在对应app的urls.py中添加路由绑定:

from django.urls import path
from .views import get_current_user

urlpatterns = [
    # 其他已有路由
    path("user/me/", get_current_user, name="current_user"),
]
补充说明
  • 如果项目使用自定义用户模型,仅需要调整serialize_user中的字段映射即可,整体逻辑无需修改
  • JsonResponse会自动处理布尔、数值等类型的序列化,不需要额外转换
  • 该方案完全兼容Django 3.2的所有特性,没有版本兼容问题

内容的提问来源于stack exchange,提问作者Joe Sadoski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:45:03