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

