django-rest-framework - POST 请求返回“方法 \"GET\" 不允许。”

Posted

技术标签:

【中文标题】django-rest-framework - POST 请求返回“方法 \\"GET\\" 不允许。”【英文标题】:django-rest-framework - POST Request returns "Method \"GET\" not allowed."django-rest-framework - POST 请求返回“方法 \"GET\" 不允许。” 【发布时间】:2018-12-22 22:06:15 【问题描述】:

我已按照安装教程设置了 django-rest-auth,但我无法使用登录 API 端点。当我发送包含正确信息的 POST 请求时,我收到 405 状态错误以响应“不允许使用方法“GET”。”

但是,当我导航到实际 URL 并从在线表单 POST 时,它可以正常工作并返回一个令牌。

帮忙?!

以邮递员为例:

https://i.imgur.com/574rERm.png

Axios 示例:

axios.post('http://----.com/api/accounts/login/', data: 'username': ---, 'password': ---)
.then(function (response) console.log(response);)
.catch(function (response) console.log(response);)

更新:

这似乎是 Heroku 或 Gunicorn 的问题?该网站使用 Gunicorn 部署在 Heroku 上,但所有 POST 请求都作为 GET 请求接收。

【问题讨论】:

您如何发送失败的请求? @Burhan Khalid 我已经使用 Postman 和 Axios 发送了请求(来自 React Native。两者都返回状态代码 405。 问题是您如何使用 Postman / Axios 发送请求,而不是使用 DRF,因为如果您使用浏览器,它显然可以工作(正如您自己所说)。因此,除非您编辑问题并添加不起作用的代码示例,否则不知道如何在此处为您提供帮助。 嗨,Burhan,我在上面添加了我的 Axios 请求代码。谢谢 【参考方案1】:

对于任何遇到 POST 请求神秘地变成 GET 请求这种奇怪现象的人......

我在 Heroku 上使用 Django + DRF。这个问题太简单了,让我想哭也想笑。

Heroku 将请求重定向到 http://example.com 到 http://www.example.com,并且此重定向涉及 GET 请求。因此,POST 请求作为 GET 请求被接收,没有任何最初存在的标头或正文。

所有这些工作和挫折只是因为缺少“www”。希望这对将来的人有所帮助!

https://***.com/a/23688973/8407856

【讨论】:

这对我有帮助! 谢谢! django 路由本身的重定向导致了我的问题。谢谢你的线索。 男人中的神。谢谢! 我缺少一个斜杠? 如果您在邮递员上遇到此问题 - 不要忘记在您的 URL 末尾添加 / :|【参考方案2】:

在我的例子中,我忽略了 https:// 前缀,所以 nginxbackend.foo.com 重定向到 https://backend.foo.com,并且在此方法中,方法 POST 更改为 GET,所以我只是添加了 https:// 前缀并且它起作用了

【讨论】:

以上是关于django-rest-framework - POST 请求返回“方法 \"GET\" 不允许。”的主要内容,如果未能解决你的问题,请参考以下文章

django-rest-framework 是不是提供管理站点来管理模型?

断言错误:Django-rest-Framework

记录对 django-rest-framework 的请求

django-rest-framework、多表模型继承、ModelSerializers 和嵌套序列化器

django-rest-framework 按日期过滤=无

为啥 django-rest-framework 不显示 OneToOneField 数据 - django