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

Django中DELETE请求被重定向至GET的问题咨询

解决Django + Tastypie中DELETE请求无斜杠被重定向为GET的问题

问题根源

Django的CommonMiddleware处理无斜杠请求时,默认返回301重定向,但只有在Django 3.1+配置APPEND_SLASH_REDIRECT_STATUS_CODE为307/308时,才会保留原始请求方法。再加上Postman默认跟随重定向时会把请求方法改成GET,叠加Tastypie对重定向请求的兼容问题,就出现了这个异常。

可行修复方案

1. 直接使用带斜杠的请求URL

最直接的解决方式:在Postman中将请求URL改为http://127.0.0.1:8000/api/v1/courses/3/,带斜杠的DELETE请求本来就能正常工作,直接采用这种格式即可。

2. 修改Django配置,让重定向保留请求方法

在settings.py中添加以下配置:

APPEND_SLASH_REDIRECT_STATUS_CODE = 307  # 临时重定向,强制保留原请求方法
# 也可选择308(永久重定向),根据业务需求决定

307/308是HTTP标准中专门用于保留请求方法的重定向状态码,Postman会遵循该规则,不会将DELETE请求改为GET。

3. 调整URL路由,兼容带/不带斜杠的请求

在API的路由配置文件中,为资源路由添加可选斜杠的匹配规则:

from django.urls import re_path
from tastypie.api import Api
from yourapp.api import CourseResource

v1_api = Api(api_name='v1')
v1_api.register(CourseResource())

urlpatterns = [
    # 同时匹配带斜杠和不带斜杠的请求
    re_path(r'^api/v1/courses/(?P<pk>\d+)/?$', v1_api.urls[0]),
    # 其他API资源路由按此格式修改
]

这样无论请求URL带不带斜杠,都会直接命中对应的视图,彻底跳过重定向环节。

4. 检查Postman的重定向设置

打开Postman的请求设置(齿轮图标入口),找到Follow Redirects选项:

  • 若采用了307/308配置,确保该选项开启,Postman会自动以原请求方法执行重定向
  • 若不想修改配置,也可直接关闭该选项,自行处理原始请求的状态码

验证步骤

修改配置后重启Django服务,再次发送不带斜杠的DELETE请求,确认是否正常执行删除操作,不再被重定向为GET请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:12:12