2016-11-06 67 views
0

我想分析傳入在Django views.py文件POST數據JSON解析Django的REST框架

POST數據:

{ 
"number" : "17386372", 
"data" : ["banana","apple","grapes" ] 
} 

這裏是我試圖與request

閱讀上述輸入數據

views.py

class Fruits(APIView): 

def post(self, request, format=None): 

    if request.method == "POST": 

     number = request.data.get('number') 
     fruits_data = json.loads(request.body) 

     if number not in [None, '', ' ']: 
      try: 

       response = {"return": "OK","data":fruits_data['data']} 
       return Response(response) 
      except: 
       return Response({"return": "NOT OK"}) 
     else: 
      return Response({"return": "NOT OK"}) 

    else: 
     return Response({"return": "NOT OK"}) 

錯誤:

You cannot access body after reading from request's data stream 
+1

選項1:首先'''json.loads''',然後提取'''「number''''。選項2:'''在拷貝導入deepcopy'''和'''my_copy = deepcopy(request)''''''之前破壞原始對象。 – Art

回答

2

request.data和request.body是兩個機制,讀取原始http請求和格式構造數據,即適合在python環境中使用。這裏的問題是你正在同時使用它們。因此,通過request.data調用,http連接的輸入流已經被讀取。現在request.body也會嘗試訪問同一個流,它現在不包含任何數據。因此,它會拋出一個錯誤。

爲了你,我想下面的代碼將工作:

fruits_data = json.loads(request.body) 
number = fruits_data["number"] 
+0

謝謝它有幫助 – Naroju