2017-01-09 81 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