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

基于Django REST Framework获取登录用户的UserProfile详情

获取登录用户的UserProfile资料详情方案

嘿,我来帮你搞定这个需求!要实现获取登录用户的个人资料(state、city、地址等),咱们可以按照以下步骤操作:

1. 确保序列化器包含所需字段

首先,你的序列化器需要明确列出要返回的UserProfile字段,这样前端才能拿到正确的数据:

from rest_framework import serializers
from .models import UserProfile

class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        # 把你需要返回的字段都列在这里,比如:
        fields = ['state', 'city', 'add1', 'add2', 'postalcode', 'country']

2. 配置ModelViewSet只返回当前用户的资料

因为你用的是ModelViewSet,咱们可以通过重写方法来确保接口只返回登录用户自己的资料,同时加上权限控制,防止未授权访问:

from rest_framework import viewsets, Response
from rest_framework.permissions import IsAuthenticated
from django.shortcuts import get_object_or_404
from .models import UserProfile
from .serializers import UserProfileSerializer

class UserProfileViewSet(viewsets.ModelViewSet):
    serializer_class = UserProfileSerializer
    # 必须登录才能访问这个接口
    permission_classes = [IsAuthenticated]

    # 方式一:过滤查询集,只包含当前用户的资料
    def get_queryset(self):
        return UserProfile.objects.filter(user=self.request.user)

    # 方式二:重写retrieve方法,直接返回当前用户的资料(无需传pk参数)
    def retrieve(self, request, *args, **kwargs):
        # 如果用户还没创建资料,返回404;如果需要返回空数据,可以调整逻辑
        instance = get_object_or_404(UserProfile, user=request.user)
        serializer = self.get_serializer(instance)
        return Response(serializer.data)

3. 配置合适的路由

如果用方式二(不需要pk的retrieve),可以在路由里直接映射到这个动作,这样前端只需要请求/profile/就能拿到当前用户的资料:

from django.urls import path
from .views import UserProfileViewSet

urlpatterns = [
    # 直接映射retrieve动作,无需pk
    path('profile/', UserProfileViewSet.as_view({'get': 'retrieve'}), name='user-profile'),
    # 如果用DefaultRouter注册,也可以保留默认路由,但记得用户访问detail时只能用自己的pk(其实一对一的话pk是固定的)
    # path('', include(router.urls)),
]

额外提示

  • 如果你的项目中存在用户未创建UserProfile的情况(比如新注册用户还没完善资料),可以在retrieve方法里处理DoesNotExist异常,返回默认值或者引导用户去创建资料。
  • 可以在序列化器中添加用户的基本信息(比如username),只需要在fields里加上user__username,或者用嵌套序列化器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:06:01