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

Django DRF用户注册API测试报405错误,请求排查问题原因

排查Django DRF注册API的405 Method Not Allowed错误

我编写了一套用于用户注册的Django DRF API,但使用Postman测试时出现405错误,操作流程及相关代码如下:

  • 创建账号并配置到项目设置与路由中
  • 视图(views)代码:
from rest_framework.response import Response
from django.contrib.auth.models import User
from .serializers import UserRegisterSerializer

class UserRegister(APIView):
     def post(self, request):
        ser_data = UserRegisterSerializer(data=request.POST)
        if ser_data.is_valid():
            User.objects.create_user(
                username=ser_data.validated_data['username'],
                email=ser_data.validated_data['email'],
                password=ser_data.validated_data['password'],
                )
            return Response(ser_data.data)
        return Response(ser_data.errors)
  • 序列化器(serializers)代码:
class UserRegisterSerializer(serializers.Serializer):
    username = serializers.CharField(required=True)
    email = serializers.EmailField(required=True)
    password = serializers.CharField(required=True, write_only=True)
  • 路由(URLs)配置:
from . import views

app_name = 'accounts'
urlpatterns = [
    path('register/', views.UserRegister.as_view()),
]

测试时出现的错误如图所示:
405错误截图


排查解决步骤

  1. 确认请求方法
    405错误核心是请求方法不被允许,先检查Postman中使用的是POST请求,而非GET/PUT等其他方法。

  2. 检查URL斜杠匹配
    Django路由默认严格匹配斜杠:如果路由配置是path('register/', ...)(带末尾斜杠),但请求URL是/accounts/register(无斜杠),会触发重定向并将请求方法转为GET,导致405。确保请求URL末尾带斜杠,或在项目settings.py中设置APPEND_SLASH = False(不推荐,除非有特殊需求)。

  3. 补全APIView导入
    视图代码中缺少APIView的导入语句,会导致视图无法正确处理POST请求,需添加:

    from rest_framework.views import APIView
    
  4. 替换request.POST为request.data
    DRF中request.POST仅支持表单数据,request.data兼容JSON、表单等多种格式,更适合API场景,修改视图中的数据传递行:

    ser_data = UserRegisterSerializer(data=request.data)
    

    同时在Postman中确认请求体格式:JSON格式选raw -> JSON,表单数据选form-data或x-www-form-urlencoded。

  5. 验证根路由配置
    确保项目根urls.py已正确包含accounts子应用的路由:

    from django.urls import path, include
    
    urlpatterns = [
        # 其他路由
        path('accounts/', include('accounts.urls')),
    ]
    

    根路由未配置会导致请求路径无效,引发错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:00:13