簡體   English   中英

收到關於gunicorn POST請求的Django服務是GET嗎?

[英]Django service on gunicorn POST request is recieved as GET?

我在帶有以下.wsgi文件的gunicorn服務器上的虛擬環境上運行的Django rest服務:

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調用時,該服務可以正常運行:

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文件有問題。 但是,curl調用又如何工作呢?

任何幫助表示贊賞,已經為此努力了一個星期。

編輯

設法在本地計算機上重新創建相同的問題。 使用其API的axios POST請求被轉換為GET。

使用axios.post(...)方法,我成功獲取了403和201。

我懷疑由於POST失敗,因此axios API具有默認的回退到GET的后備功能,然后它不會失敗並且服務可以正常響應(應為“不支持GET”)。

調試此問題的新步驟將是詢問,由於POSTMAN正在工作,並且很明顯是axios引起了問題,因此如何在JavaScript中盡可能近地重新創建POSTMAN POST調用。

您沒有使用相同的URL。 在curl片段中,您請求http:// localhost:8000 / valuation / predict /,但在第二個片段中,您請求http:// localhost:8000 / valuation / predict-不帶最后斜杠。

默認情況下,Django會將不以斜杠結尾的URL重定向到一個以斜杠結尾的URL,並且重定向始終是GET。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM