最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

关于gunicorn POST请求的Django服务收到GET?

运维笔记admin11浏览0评论

关于gunicorn POST请求的Django服务收到GET?

关于gunicorn POST请求的Django服务收到GET?

我有一个Django休息服务在gunicorn服务器上的虚拟环境上运行,具有以下.wsgi文件:

import os, sys import site

site.addsitedir('/opt/valuation/env/lib/python2.7/site-packages')


sys.stdout = sys.stderr
os.environ['DJANGO_SETTINGS_MODULE'] = 'valuation.valuationcont.valuation.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

当我卷曲POST调用时,服务完美运行:

curl -H "Content-Type: application/json" -X POST -d '{...}' -u username:password http://localhost:8000/valuation/predict/

但是当我使用axios在API网关上执行相同的请求时,Django服务会响应我的自定义GET响应(“不支持GET,尝试POST”)。

axios({
    method: 'post',
    url:'http://localhost:8000/valuation/predict',
    headers:{
      "Content-Type":"application/json",
      "Authorization":"Basic [BASE64 ENCODING]"
    },
    data:{
      ...
    }
}).then(response=>{
  console.log(response.data)
}).catch(err=>{
  console.log(err.toString())
})

请求从GET转换为POST。这只发生在django / gunicorn服务中。

由于我是django / gunicorn的新手,我认为.wsgi文件有问题。但是如何调整卷曲呢?

任何帮助表示赞赏,现在已经挣扎了一个星期。

编辑:

管理在本地计算机中重新创建相同的问题。 axios使用其API的POST请求被转换为GET。

使用axios.post(...)方法我设法得到403和201.所有POSTMAN工作正常。

我怀疑,由于POST失败,axios API有一个默认回退到GET然后不会失败并且服务正常响应(“GET不支持”应该如此)。

调试这个的新步骤是问,如何在javascript中尽可能接近地重新创建POSTMAN POST调用,因为POSTMAN正在工作,显然是axios导致问题。

回答如下:

您没有使用相同的网址。在卷曲片段中,您请求http://localhost:8000/valuation/predict/,但在第二个请求http://localhost:8000/valuation/predict - 没有最后的斜杠。

Django默认情况下将不以斜杠结尾的URL重定向到一个斜杠,并且重定向始终是GET。

发布评论

评论列表(0)

  1. 暂无评论