当我向django应用程序发出Http DELETE请求时。它直接返回301(永久移动)响应,并将我重定向到相同网址的GET请求。我猜Http PUT请求会像DELETE请求一样返回301。有没有办法用django处理DELETE请求?
答案 0 :(得分:43)
重定向是由APPEND_SLASH设置引起的:
<强> APPEND_SLASH 强>
默认值:True
设置为True时,如果请求URL 与任何模式都不匹配 URLconf并没有以 斜杠,发出HTTP重定向 带有斜杠的相同网址。 请注意,重定向可能会导致任何重定向 在POST请求中提交的数据 丢失。
确保您的服务器和客户端与尾部斜杠一致。
如果您的项目根本不需要尾部斜杠(即,它是一个没有尾部斜杠的api),您可以禁用它。否则,请确保您的urlconf接受没有尾部斜杠的路径。
答案 1 :(得分:4)
我在使用AngularJs和Django REST时遇到了这个问题。
Django Rest正在重定向客户端,以便请求带有斜杠的URL,而AngularJS'$resource
确保其URL上没有尾随破折号。这在issue
在同一个链接上,您会看到使用更灵活的$http
服务而不是$resource
的建议。但是......我真的想使用$resource
(更少的代码)。
因此,解决方案是微不足道的,因为Django REST团队已经解决了这个recently:
router = DefaultRouter(trailing_slash=False)
http://django-rest-framework.org/api-guide/routers.html
(我已将此添加到我的blog,因为我想使用AngularJS和Django REST记录一些陷阱
答案 2 :(得分:0)
另一个可能导致这种情况的原因是您的网络服务器将 http
请求重定向到 https
,而您的前端客户端正在向 http
发送请求。这就是我的情况。所以改客户端直接调用https
。