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://
前缀,所以 nginx 将 backend.foo.com
重定向到 https://backend.foo.com
,并且在此方法中,方法 POST 更改为 GET,所以我只是添加了 https://
前缀并且它起作用了
【讨论】:
以上是关于django-rest-framework - POST 请求返回“方法 \"GET\" 不允许。”的主要内容,如果未能解决你的问题,请参考以下文章
django-rest-framework 是不是提供管理站点来管理模型?