对 django 的 Http 删除请求返回 301(永久移动)

问题描述 投票:0回答:4

当我向 django 应用程序发出 Http DELETE 请求时。它直接返回 301(永久移动)响应并将我重定向到相同 url 的 GET 请求。我猜测 Http PUT 请求会像 DELETE 请求一样返回 301。有没有办法用django处理DELETE请求?

django rest
4个回答
77
投票

重定向是由 APPEND_SLASH 设置引起的:

APPEND_SLASH

默认:真

设置为True时,如果请求URL 与中的任何模式都不匹配 URLconf 并且它不以 斜杠,HTTP 重定向被发送到 附加斜杠的相同 URL。 请注意,重定向可能会导致任何 POST 请求中提交的数据 迷失了。

确保您的服务器和客户端尾部斜杠一致。

如果您的项目根本不需要尾部斜杠(即,它是一个没有尾部斜杠的 api),您可以禁用它。 否则,请确保您的 urlconf 接受不带尾部斜杠的路径。


9
投票

我在使用 AngularJs 和 Django REST 时遇到了这个问题。

Django Rest 正在重定向客户端,以便请求带有尾部斜杠的 URL,而 AngularJS 的

$resource
确保其 URL 上没有尾部破折号。这在这个issue

中有描述

在同一链接上,您将看到使用更灵活的

$http
服务而不是
$resource
的建议。但是...我真的很想使用
$resource
(更少的代码)。

所以解决方案很简单,因为 Django REST 团队最近已经解决了这个问题

router = DefaultRouter(trailing_slash=False)

http://django-rest-framework.org/api-guide/routers.html

(我已将此添加到我的

博客,因为我想使用 AngularJS 和 Django REST 记录一些问题)


0
投票
可能导致此问题的另一个原因是,当您的 Web 服务器将

http

 请求重定向到 
https
 并且您的前端客户端正在向 
http
 发送请求时。我就是这种情况。所以改客户端直接调用
https


0
投票
发布的这个答案已经对我有用:

向同一 URL 发出 HTTP 重定向,并附加斜杠。

确保您的服务器和客户端尾部斜杠一致。

于 2011 年 6 月 13 日 21:17 回复

© www.soinside.com 2019 - 2024. All rights reserved.