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

全新Django-Ninja-Extra项目中POST请求返回405方法不允许

解决POST请求返回405 Method Not Allowed的问题

1. 检查URL路由配置(最可能的核心原因)

你未提供项目根目录的urls.py代码,这大概率是问题所在。需确保Django的URL配置中正确挂载了Ninja Extra的API实例:

在项目根urls.py中添加如下配置:

from django.contrib import admin
from django.urls import path
from .api import api  # 导入你定义的api实例

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', api.urls),  # 将API挂载到/api/路径下
]

若缺失此配置,你的API路由不会被Django识别,请求会被当作普通Django视图处理,直接返回405。

2. 处理CSRF验证

你的MIDDLEWARE启用了CsrfViewMiddleware,POST请求会触发CSRF校验,这也会导致405或403错误,可二选一解决:

  • 方案一:禁用API的CSRF校验
    在初始化API时添加csrf=False参数:
    from ninja_extra import NinjaExtraAPI
    
    api = NinjaExtraAPI(csrf=False)
    api.auto_discover_controllers()
    
  • 方案二:请求时携带CSRF令牌
    若保留CSRF验证,需在请求头中添加X-CSRFToken字段,值取Cookie中的csrftoken值,同时补上请求体缺失的user_id:
    curl -X 'POST' \
      'http://127.0.0.1:8000/api/department/create/' \
      -H 'accept: */*' \
      -H 'Content-Type: application/json' \
      -H 'X-CSRFToken: 你的CSRF令牌值' \
      -d '{
      "name": "string",
      "last_modified": "2024-12-11T15:35:25.361Z",
      "user_id": 1
    }'
    

3. 补充请求体缺失字段

你的DepartmentIn Schema要求必须传入user_id,当前请求payload中无此字段,即使解决前面的问题,也会返回422验证错误,需在请求体中添加存在的用户ID值。

4. 验证路由注册状态

访问http://127.0.0.1:8000/api/docs(Ninja Extra自带文档页),检查是否存在/department/create/的POST路由:

  • 若不存在,确认department app已在INSTALLED_APPS中(你的配置已满足)
  • 确认控制器文件命名为api.py(你的department/api.py符合要求)
  • 重启Django开发服务器,确保代码修改生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:35:53