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

Django DRF中使用PUT方法更新用户资料出现403错误求助

Django DRF 用户资料编辑PUT接口403错误排查方案

1. 权限类配置检查

  • 确认视图类是否配置了正确的权限规则:
    • 基础要求需包含IsAuthenticated确保仅登录用户可访问;若限制用户仅能编辑自身资料,需搭配自定义权限类(如IsOwnerOrReadOnly)
    • 示例代码:
      from rest_framework.permissions import IsAuthenticated
      from .permissions import IsOwnerOrReadOnly
      
      class UserViewSet(viewsets.ModelViewSet):
          permission_classes = [IsAuthenticated, IsOwnerOrReadOnly]
      
  • 排查是否误用只读视图类:若使用ReadOnlyModelViewSet会限制PUT等写操作,需替换为ModelViewSet

2. Token认证有效性验证

  • 检查请求头格式:必须为Authorization: Bearer <access_token>,注意Bearer与token间的空格不可省略
  • 验证token有效性:若使用django-rest-framework-simplejwt,可通过命令校验:
    python manage.py inspecttoken <你的access_token>
    
  • 确认项目配置的认证类正确:
    # settings.py
    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': [
            'rest_framework_simplejwt.authentication.JWTAuthentication',
        ],
    }
    

3. 自定义权限逻辑校验

若存在自定义权限类IsOwnerOrReadOnly,检查has_object_permission方法逻辑:

from rest_framework import permissions

class IsOwnerOrReadOnly(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        # 只读方法允许所有登录用户访问
        if request.method in permissions.SAFE_METHODS:
            return True
        # 写操作仅允许用户修改自身资料
        return obj == request.user  # 若为自定义用户模型,需确认关联字段是否正确,如obj.user == request.user

4. 路由与视图映射检查

  • 确认/users/users/<user_id>/对应的视图支持PUT方法:需绑定ModelViewSet的update方法,而非自定义只读视图
  • 校验请求的user_id是否与当前登录用户ID一致:若尝试修改他人资料触发403为正常权限控制,若修改自身仍报错则需排查权限逻辑

5. 序列化器与模型字段检查

  • 排查序列化器是否将需修改的字段设为只读:
    class UserSerializer(serializers.ModelSerializer):
        class Meta:
            model = User
            fields = ['id', 'username', 'email', 'profile']
            read_only_fields = ['id']  # 确保需修改字段未被加入此列表
    
  • 检查迁移文件是否误操作用户模型权限:确认初始化兴趣的迁移未修改用户模型的可编辑字段权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:00:55