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

Django React项目中DRF如何仅返回当前登录用户的关联数据

实现方案

前置准备

首先确保你的List模型已经和Django的用户模型做了外键关联,用于存储数据对应的所属用户,示例模型定义如下:

from django.db import models
from django.contrib.auth.models import User

class List(models.Model):
    # 你原有定义的其他字段
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="所属用户")

如果之前没有添加该字段,修改完模型后需要执行以下命令完成数据库迁移:
python manage.py makemigrations
python manage.py migrate

视图层修改

你需要重写ModelViewSet提供的get_queryset方法动态过滤当前登录用户的数据,同时添加权限控制拦截未登录用户的请求,另外重写数据创建逻辑自动关联当前用户,避免前端传用户ID带来的安全问题,完整修改后的视图代码如下:

from rest_framework.permissions import IsAuthenticated

class ListView(viewsets.ModelViewSet):
    serializer_class = ListSerializer
    # 配置接口权限:仅登录认证通过的用户可以访问
    permission_classes = [IsAuthenticated]

    # 重写查询集,仅返回当前登录用户的关联数据
    def get_queryset(self):
        return List.objects.filter(user=self.request.user)
    
    # 重写创建逻辑,新增数据时自动绑定当前登录用户
    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

前端适配说明

你现有的前端请求代码无需修改,只要确保axiosInstance已经正确配置了认证信息即可:

  • 若使用JWT/Token认证:需给axiosInstance全局配置Authorization请求头,值为Bearer 登录成功后拿到的用户token
  • 若使用Django Session认证:需给axiosInstance配置withCredentials: true,让请求自动携带认证Cookie

补充说明

重写get_queryset后即使用户手动请求其他用户数据的详情接口(如/list/3/,3为其他用户的数据ID),接口也会直接返回404,天然避免了越权访问的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:15:02