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

时间:2011-02-03 21:21:19

标签: django rest

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

3 个答案:

答案 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