WSGIRequest 对象没有属性 PUT

Anm*_*dal 3 python django json wsgi put

我正在尝试使用 curl 的 put 请求向本地服务器发出 put 请求:

curl -X PUT -H "Content-Type: application/json" -d '{"connid":"12"}' "127.0.0.1:8000/api/kill"
Run Code Online (Sandbox Code Playgroud)

我收到相同的回复:

'WSGIRequest' 对象没有属性 'PUT'

对于以下代码:

def kill(req):
  conid = req.PUT['connid']
  statusres = {}

  if conid in state:
    error[conid] = 'true'
    statusres['status'] = 'ok'

  else:
    statusres['status'] = 'invalid connection Id : '+ conid
  return JsonResponse(statusres)
Run Code Online (Sandbox Code Playgroud)

我@csrf_exempt之前也用过这个函数。

Dan*_*man 6

你在这里误解了几件事。

当您发送表单编码的数据时,无论是 POST 还是 PUT,在 Django 中您总是可以在request.POST. 所以你会在request.POST['conid'].

但是,您发送的不是表单编码数据;您正在发送 JSON。您需要访问请求正文,并将其传递给json.loads函数进行解码:

def kill(request):
  data = json.loads(request.body)
  conid = data['connid']
Run Code Online (Sandbox Code Playgroud)