2015-12-16 28 views
1

我通過Django restframework中的POST請求獲取以下數據。 我需要序列化這些數據,這些數據包含多個模型的數據。在django restframework中序列化數據

data={'admin-1': 
    {'first_name':'john' 
    ,'last_name':'white' 
    ,'job_title':'CEO' 
    ,'email':'[email protected]' 
    }, 
'admin-2': 
    {'first_name':'lisa' 
    ,'last_name':'markel' 
    ,'job_title':'CEO' 
    ,'email':'[email protected]' 
    }, 
'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) 

基本上,我需要反序列化數據,但得到這個錯誤。

request == request.data == job_title Internal Server Error: /api/create-company-profile/ Traceback (most recent call last): File "/Users/prem/.virtualenvs/ghost/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/Users/prem/.virtualenvs/ghost/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 57, in wrapped_view return view_func(*args, **kwargs) File "/Users/prem/.virtualenvs/ghost/lib/python2.7/site-packages/django/views/generic/base.py", line 69, in view return self.dispatch(request, *args, **kwargs) File "/Users/prem/.virtualenvs/ghost/lib/python2.7/site-packages/rest_framework/views.py", line 452, in dispatch response = self.handle_exception(exc) File "/Users/prem/.virtualenvs/ghost/lib/python2.7/site-packages/rest_framework/views.py", line 449, in dispatch response = handler(request, *args, **kwargs) File "/Users/prem/Documents/Ghost/positionmatch-new/menkes-server-master/menkesserver/human_resources/views.py", line 81, in post print json.loads(request.data) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/init.py", line 338, in loads return _default_decoder.decode(s) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 365, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) TypeError: expected string or buffer

回答

0

應該沒有必要在視圖中手動解碼POST數據。只要您使用JSONParser,如parsers documentation中所述,request.data應該已經完全爲您解析。

此外,它看起來像您發送到視圖的請求可能不會如何行事。如果你想發送帶有請求的JSON數據,你需要更明確一點。如圖所示在requests documentation的例子:

>>> import json 
>>> url = 'https://api.github.com/some/endpoint' 
>>> payload = {'some': 'data'} 

>>> r = requests.post(url, data=json.dumps(payload)) 
+0

當我顯示request.data,我沒有得到完整的數據,多數民衆贊成被張貼。它看起來像被截斷,但不知道......這裏是打印的數據... request.data == {u'admin-1':u'job_title',u'company-detail':u'zip_cd',u'admin-2':u'job_title'} – user1050619

+0

你應仔細檢查您在請求中發送的數據。我試着將你在這裏展示的內容複製並粘貼到一個Python shell中,並且它缺少一個尾部的'}'。 –

+0

我已更新我的答案,以包含正確編碼您的請求的信息 –