Django提交表单报Method Not Allowed (POST): /property/like/错误排查
问题排查及解决方案
核心错误(Method Not Allowed POST)常见原因及修复
1. URL斜杠匹配问题
这是最高发的原因:Django默认开启APPEND_SLASH配置,当你提交POST请求到不带结尾斜杠的地址/property/like时,Django会自动返回301重定向到带斜杠的/property/like/,但重定向过程会把POST请求转为GET请求,就会触发405方法不允许错误。
修复方案:
- 按下F12查看页面渲染后的表单
action属性值,确保是带结尾斜杠的/property/like/ - 或者修改urls.py的path配置,去掉路径结尾斜杠,和表单提交地址保持一致即可。
2. 根路由配置错误
检查项目根目录的urls.py中引入property app路由的配置,如果你用re_path配置根路由,不要加正则结束符$,否则会截断子路由匹配,导致请求地址无法命中对应视图:
# 根urls.py正确写法 path('property/', include('property.urls')) # 若使用re_path不要加结束符$ re_path(r'^property/', include('property.urls'))
3. 视图被限制了请求方法
检查like_property视图上是否加了错误的请求方法限制装饰器,比如@require_GET、@require_http_methods(["GET"]),如果有,修改为允许POST即可:
from django.views.decorators.http import require_http_methods @require_http_methods(["POST"]) # 正确配置,仅允许POST访问该视图 def like_property(request): # 原有业务逻辑
额外代码bug修复(不影响405报错,但会导致点赞逻辑异常)
你视图中存在手误,把赋值语句写成了判断语句,会导致点赞状态无法正常切换:
# 错误代码:双等号是判断语句,没有赋值效果 if like.value == 'Like': like.value == 'Unlike' # 改为单等号完成赋值 if like.value == 'Like': like.value = 'Unlike'
内容的提问来源于stack exchange,提问作者Josphat Gitogo
相关产品推荐
相关产品推荐

