我通过Django restframework中的POST请求获得以下数据。我需要序列化这些数据,这些数据包含多个模型的数据。
data={'admin-1':
{'first_name':'john'
,'last_name':'white'
,'job_title':'CEO'
,'email':'test1@gmail.com'
},
'admin-2':
{'first_name':'lisa'
,'last_name':'markel'
,'job_title':'CEO'
,'email':'test2@gmail.com'
},
'company-detail':{'description':'We are a renowned engineering company'
,'size':'1-10'
,'industry':'Engineering'
,'url':'http://try.com'
,'logo':''
,'addr1':'1280 wick ter'
,'addr2':'1600'
,'city':'rkville'
,'state':'md'
,'zip_cd':'12000'
,'phone_number_1':'408-393-254'
,'phone_number_2':'408-393-221'}
r = requests.post('http://127.0.0.1:8000/api/create-company-profile/',data=data)
print r.status_code
print r.text这是CreateAPI的视图-
class CompanyCreateApiView(CreateAPIView):
def post(self, request, *args, **kwargs):
print 'request ==', request
print 'request.data == ', request.data['admin-2']
import json
print json.loads(request.data)
data=json.dumps({'status':'success'})
return Response(data, status=status.HTTP_200_OK)基本上,我需要反序列化数据,但得到这个错误。
请求"/Users/prem/.virtualenvs/ghost/lib/python2.7/site-packages/django/core/handlers/base.py",request.data == job_title内部服务器错误:/api/company/ Traceback (最近一次调用):get_response response =wrapped_callback(请求,*callback_args,文件"/Users/prem/.virtualenvs/ghost/lib/python2.7/site-packages/django/views/decorators/csrf.py",第57行,在wrapped_view返回view_func(*args,**kwargs)文件"/Users/prem/.virtualenvs/ghost/lib/python2.7/site-packages/django/views/generic/base.py",第69行,查看返回self.dispatch(请求,*args,**kwargs)文件"/Users/prem/.virtualenvs/ghost/lib/python2.7/site-packages/rest_framework/views.py",行452,在调度响应= self.handle_exception(exc)文件"/Users/prem/.virtualenvs/ghost/lib/python2.7/site-packages/rest_framework/views.py",行449中,在调度响应=处理程序(请求,*args,**kwargs)文件"/Users/prem/Documents/Ghost/positionmatch-new/menkes-server-master/menkesserver/human_resources/views.py",第81行,在打印后的json.loads(request.data)文件行338,在loads中返回_default_decoder.decode(s)文件_default_decoder.decode行365,在解码obj中,end = self.raw_decode(s,idx=_w(s,0).end() TypeError:预期字符串或缓冲区)
发布于 2015-12-16 18:28:47
在您的视图中,不应该需要手动解码POST数据。只要您使用的是JSONParser (如解析器文档中所描述的),request.data就应该已经被完全解析了。
此外,您发送到视图的请求可能不是您所认为的那样。如果您想发送带有请求的JSON数据,则需要更加明确一些。如请求文件中的示例所示
>>> import json
>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}
>>> r = requests.post(url, data=json.dumps(payload))https://stackoverflow.com/questions/34319412
复制相似问题