我有以下代码来查看DRF:
$('.filterOptions').change(function(){
var theChosenLang = $('#langOption').find(':selected').attr('data-lang-option');
var theChosenCat = $('#categoryOption').find(':selected').attr('data-category-option');
$('.displayBox').css('display','none');
var selector = '.displayBox';
if(theChosenLang != "all"){
selector += '[data-lang-option="'+ theChosenLang +'"]';
}
if(theChosenCat != "all"){
selector += '[data-category-option="'+ theChosenCat +'"]';
}
$(selector).fadeIn();
});
我通过以下方式通过 python-requests 调用URL:
from rest_framework import viewsets
class MyViewSet(viewsets.ViewSet):
def update(self, request, pk = None):
print pk
print request.data
但是当从服务器收到请求时,request.data为空。这里有输出:
import requests
payload = {"foo":"bar"}
headers = {'Content-type': 'application/json'}
r = requests.put("https://.../myPk", data= payload, headers=headers)
如何解决此问题?
答案 0 :(得分:13)
您需要将payload
作为序列化json
对象发送。
import json
import requests
payload = {"foo":"bar"}
headers = {'Content-type': 'application/json'}
r = requests.put("https://.../myPk/", data=json.dumps(payload), headers=headers)
否则会发生什么事情,DRF实际上会抱怨:
*** ParseError: JSON parse error - No JSON object could be decoded
您会通过调试视图(例如使用pdb或ipdb)或打印变量来看到错误消息:
def update(self, request, pk = None):
print pk
print str(request.data)
答案 1 :(得分:3)
在这里检查2个问题: -
希望有所帮助
答案 2 :(得分:1)
假设您需要执行足够新的请求,请执行以下操作:
import requests
payload = {"foo":"bar"}
r = requests.put("https://.../myPk", json=payload, headers=headers)
然后它将为您正确格式化有效负载并提供适当的标头。否则,您发送的application/x-www-urlformencoded
数据是DRF无法正确解析的,因为您告诉它您正在发送JSON。