2017-01-09 6 views
0

웹 브라우저 (chrome/safari)를 통해 Django Rest 프레임 워크에 패치 요청을 보냅니다. Google 크롬을 통해 API (https://test.mysite.com/cart/)가 실행될 때 Django 백엔드에서 값 request.data 값에 액세스하려고 시도했을 때 데이터를 읽을 수 있습니다.django REST API에서 request.data가 비어 있습니다. AngularJS를 사용하여 Safari에서 PATCH 요청을 요청했습니다.

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} 
같은 PATCH 요청이 사파리에서 트리거 때 브라우저 (비어 표시) 나에게 카트 API 호출

JS를 request.data를 제공하지 않습니다

Django의 요청 객체에서 PDB를 통해 요청 된 데이터에 액세스하는 중. 에 액세스 할 수

장고 코드 : 크롬에서 요청

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) 

장고 콘솔 로그 : 사파리에서 요청

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

장고 콘솔 로그 :

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

또한이 작업을 트리거하는 방법에 대한 코드를 표시해야합니다. 브라우저는 기본적으로 PATCH를 보내지 않으므로 사용자 정의 코드가 있어야합니다. –

+0

더 많은 코드 스냅 샷 추가로 세부 정보를 업데이트했습니다. 당신의 생각을 도와주세요. – thatzprem

+0

@Alasdair - 코드를 업데이트했습니다. – thatzprem

답변

0

콘텐츠 유형을 application/json으로 설정했는지 확인하십시오. 마치 나머지 프레임 워크가 application/x-www-form-urlencoded으로 처리하는 것처럼 보입니다.

+0

시도해 보았지만 코드는 여전히 작동하지 않습니다. – thatzprem