2017-01-09 121 views
0

我通過網頁瀏覽器(chrome/safari)向Django Rest框架發送了一個補丁請求。 當我嘗試從Django後端訪問數據request.data,當通過Google Chrome觸發API(https://test.mysite.com/cart/)時,我可以讀取數據。但是,當同樣的PATCH請求從Safari瀏覽器觸發的瀏覽器不給我request.data(顯示爲空)django REST API中的request.data爲空使用AngularJS從Safari請求PATCH請求

JS調用API車:

var order = {}; 
    order.num_cases = 8; 

    var absloutePatchURL = '/cart/'+order.cartID; 
    window.console.log('Update cart absolute URL:',absloutePatchURL); 
    $http.patch(absloutePatchURL,order, {data:JSON}). success(function(data, status, headers, config) { 
     window.console.log("Your cart is updated successfully");     
     }).error(function(data, status, headers, config) { 
     toastr.error('Sorry, unable to update your item to the cart. Please try later.'); 
    }); 

請求細節:

URL: https://test.mysite.com/cart/ 
Request Type: PATCH 
Request Data: {"num_cases":6} 

在Django上訪問通過PDB請求對象請求的數據。

Django的代碼來訪問:從瀏覽器請求時

class CartViewSet(CartMixin, ModelViewSet): 

    def update(self, request, *args, **kwargs): 

     import pdb 
     pdb.set_trace() 

     logger.debug("Request Data: {0}".format(request.data)) 

     return ModelViewSet.update(self, request, *args, **kwargs) 

Django的控制檯日誌:從SAFARI請求時

-> return ModelViewSet.update(self, request, *args, **kwargs) 
(Pdb) 
(Pdb) request.data 
<QueryDict: {u'{"num_cases":8}': [u'']}> 

Django的控制檯日誌:

<QueryDict: {}> 
(Pdb) request.data 
<QueryDict: {}> 
+0

此外,您還需要顯示如何觸發此操作的代碼。瀏覽器本身不會發送PATCH,所以您必須有一些自定義代碼。 –

+0

更新了更多代碼快照添加的細節。請幫助我的想法。 – thatzprem

+0

@Alasdair - 我更新了代碼 – thatzprem

回答

0

確保您將內容類型設置爲application/json。看起來好像休息框架將其視爲application/x-www-form-urlencoded

+0

我試過了,代碼似乎仍然不工作。 – thatzprem