" Django服务在gunicorn上收到的POST请求是否为GET?"

2024-04-19 08:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Django rest服务在gunicorn服务器上的virutal环境上运行,其.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()

当我使用curl POST call时,该服务工作得非常好:

^{pr2}$

但当我使用axios在API网关上执行相同的请求时,Django服务会响应我的自定义GET响应(“GET not supported,try 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())
})

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

因为我是django/gunicorn的新手,所以我认为.wsgi文件有问题。但是卷曲调用怎么会起作用呢?在

感谢你的帮助,我已经为此挣扎了一个星期了。在

编辑

设法在我的本地计算机上重现了同样的问题。使用其API的axios POST请求被转换为GET。在

使用axios.post(...)方法,我得到了403和201。尽管邮递员工作得很好。在

我怀疑,由于POST失败,axios API有一个默认的回退机制来获取,然后它不会失败,服务会正常响应(“getnotsupported”应该是这样)。在

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


Tags: 文件djangocoreimportapiwsgigetos
1条回答
网友
1楼 · 发布于 2024-04-19 08:18:34

你使用的不是同一个网址。在curl片段中,您请求http://localhost:8000/valuation/predict/,但是在第二个片段中,您请求http://localhost:8000/valuation/predict-而没有最后的斜杠。在

默认情况下,Django会将不以斜杠结尾的url重定向到以斜杠结尾的url,重定向始终是GET。在

相关问题 更多 >