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

Django将AJAX请求迁移到其他应用后报405 Method Not Allowed错误如何解决

问题原因

  1. series应用urls.py正则表达式语法错误:你写的r'^$submitseries/'中$是正则结束标识符,放在submitseries前面意味着要求路径在开头后直接结束,完全无法匹配submitseries/路径,所以所有相关请求都无法命中submitseries视图函数。
  2. 根urls.py重复包含series.urls导致路由冲突:你同时将series.urls绑定到了/series/和/submitseries/两个前缀下,当请求匹配到/submitseries/前缀时,进入series.urls后剩余路径为空,会命中第一个规则的IndexView类视图,而默认类视图如果没有实现post方法,就会直接返回405 Method Not Allowed错误,这是报错的直接原因。
  3. AJAX请求使用相对路径存在歧义:url: "series/submitseries/"是相对路径,会根据当前页面的URL拼接,比如你在/series/页面下请求会拼接为/series/series/submitseries/,路径完全错误。

解决步骤

1. 修正series应用的urls.py

去掉正则里多余的$标识符:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    # 修正后的正则,正确匹配submitseries/路径
    url(r'^submitseries/$', views.submitseries, name='submitseries'),
]

2. 清理根urls.py的重复配置

删掉多余的submitseries/前缀绑定,只用/series/前缀统一管理series应用的所有路由:

from django.contrib import admin
from django.urls import include,path

urlpatterns = [
    path('', include(('home.urls','home'),namespace="home")),
    # 仅保留这一个series应用的引入即可
    path('series/', include(('series.urls','series'),namespace="series")),
    path('players/', include(('players.urls','players'),namespace="players")),
    path('admin/', admin.site.urls),
]

3. 修正AJAX请求路径

改成绝对路径,避免相对路径拼接错误:

$.ajax({
    type: "POST",
    // 开头加/ 表示从域名根路径开始匹配
    url: "/series/submitseries/",
    data: {"series_url":series_url},
    headers:{
        "X-CSRFToken": csrftoken
    },
    // 其余代码保持不变
    success: function(result){
        message = "Series #" + result["series_id"] + " inserted successfully";
        bootstrap_alert['info'](message);
    },
    error: function(result){
        bootstrap_alert['warning'](result.responseJSON.error_msg);
    }
})

可选优化(推荐)

在模板中使用Django的url模板标签生成路径,避免硬编码路径出错:

// 直接在模板的script标签中使用,自动生成正确路径
url: "{% url 'series:submitseries' %}",

验证方法

修改完成后可以先直接在浏览器地址栏访问http://localhost:8000/series/submitseries/,如果返回405(因为视图仅处理POST请求),说明路由已经成功命中submitseries函数,此时再发AJAX POST请求即可正常运行。如果返回404,可开启Django DEBUG模式,查看404页面的路由匹配日志定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:24:04