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

如何解决Django Rest Framework用户注册接口403权限问题

解决Django DRF用户注册接口403权限问题

你的403错误核心原因是Django Rest Framework默认启用了需要用户认证的权限策略,而注册接口本应允许匿名用户访问。以下是具体修复方案:

方案1:给注册视图单独设置权限

这是最精准的修复方式,仅开放注册接口的匿名访问权限,不影响其他接口的安全策略:

修改user_api/views.py:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from rest_framework.permissions import AllowAny  # 新增导入
from user_api.serializers import UserSerializer
from django.contrib.auth.models import User

class UserCreate(APIView):
    permission_classes = [AllowAny]  # 新增配置,允许匿名访问

    def post(self, request, format='json'):
        serializer = UserSerializer(data=request.data)
        if serializer.is_valid():
            user = serializer.save()
            if user:
                return Response(serializer.data, status=status.HTTP_201_CREATED)

        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

方案2:调整全局权限设置(可选)

如果你的项目大部分接口都需要开放匿名访问,可以修改项目根目录的settings.py,调整DRF的默认权限规则:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.AllowAny',  # 替换原有的IsAuthenticated规则
    ]
}

注意:此方式会影响所有DRF接口,仅在项目需求允许的情况下使用,优先推荐方案1做精准控制。

额外验证:路由冲突排查

从你的mexicantrain/urls.py配置来看,注册接口路由api/users/与router.urls的api/前缀不存在冲突,且测试用例中reverse('user-create')能正常解析,因此路由问题概率极低。若后续仍有异常,可优先检查路由匹配顺序。

修改后重新运行测试,接口应能正常返回201状态码并完成用户创建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:07:14