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
相关产品推荐
相关产品推荐

