2015-12-24 132 views
1

我可以在我的終端(本地測試)看到「發佈」正在發生。但數據從未到達。在瀏覽器中,它告訴給我一個200,但是響應是我的異常錯誤(「不工作」)。HTTP Post給200,但沒有數據到達。異常處理

我怎樣才能得到數據到我的數據庫實際上?或者請提出一些錯誤/異常處理來嘗試解決本地問題。

測試時,這工作得很好:

import requests 
r = requests.post('http://localhost:8000/api/item/291/', {'uid':21, 'click':1, 'like':1, 'image':0, 'scroll':1, 'clickbuy':0}) 

Rest_views.py

from rest_framework.response import Response 
from rest_framework.renderers import JSONRenderer 
from django.http import JsonResponse 
import datetime 
import json 

def add_analytic(product, user, like, click, image, scroll, clickbuy): 
    Analytic(product=product, user=user, like=like, click=click, image=image, scroll=scroll, clickbuy=clickbuy).save() 

class ProductItemView(views.ObjectGetMixin, views.BaseObjectView): 
    model = Product 
    mapper_class = mappers.ProductMapper 

    def post(self, request, *args, **kwargs): 
     try: 
      add_analytic(
       product=Product.objects.get(pk=kwargs['pk']), 
       user=User.objects.get(id=request.POST['uid']), 
       like=int(request.POST['like']), 
       click=int(request.POST['click']), 
       image=int(request.POST['image']), 
       scroll=int(request.POST['scroll']), 
       clickbuy=int(request.POST['clickbuy'])) 
      return JsonResponse({'IT': 'WORKED'}) 
     except Exception: 
      return JsonResponse({'Result': 'Not working'}) 

AngularJS:

.factory('cardsApi', ['$http', function ($http) { 
     var like = JSON.stringify({'uid':21, 'click':1, 'like':1, 'image':0, 'scroll':1, 'clickbuy':0}); 

     var postRecordlikes = function (product_id) { 
      $http({ 
       url: ('http://localhost:8000/item/' + product_id + "/"), 
       dataType: 'json', 
       method: 'POST', 
       data: like, 
       headers: { 
        "Content-Type": "application/json" 
       } 
     }) 
     } 

     return { 
      postRecordLikes: postRecordLikes, 
     }; 
    }]) 

    .controller('CardsCtrl', ['$scope', 'TDCardDelegate', 'cardsApi', '$http', 
     function ($scope, TDCardDelegate, cardsApi, $http) { 
      console.log('CARDS CTRL'); 
      $scope.cards = [] 

      $scope.cardSwipedRight = function (card) { 
       console.log('RIGHT'); 
       postRecordLikes(card); 
      }; 


      var postRecordLikes = function (product_id) { 
       cardsApi.postRecordLikes(product_id) 
        .then(function successCallback(product_id) { 

        }, function errorCallback(response) { 
         console.log(response); 
        }); 
      }; 

     } 
    ]) 

和Chrome網絡檢查的結果是:

enter image description here

+0

我看你不順眼傳遞變量數據,但我發現在代碼中沒有不喜歡的變量。難道它不是在這裏「喜歡」嗎? –

+0

這是一個錯字 - 修復它。難道我需要將「views.ObjectGetMixin」更改爲「views.ObjectPostMixin」?如果是這樣,我怎麼能這樣做? – Ycon

+0

將異常的詳細信息傳遞給響應 –

回答

-1

嘗試與request.data合作,以訪問您的數據:

class ProductItemView(views.ObjectGetMixin, views.BaseObjectView): 
    model = Product 
    mapper_class = mappers.ProductMapper 

    def post(self, request, *args, **kwargs): 
     try: 
      add_analytic(
       product=Product.objects.get(pk=kwargs['pk']), 
       user=User.objects.get(id=request.data['uid']), 
       like=int(request.data['like']), 
       click=int(request.data['click']), 
       image=int(request.data['image']), 
       scroll=int(request.data['scroll']), 
       clickbuy=int(request.data['clickbuy'])) 
      return JsonResponse({'IT': 'WORKED'}) 
     except Exception: 
      return JsonResponse({'Result': 'Not working'}) 
+0

謝謝,但這並不奏效。我在rest_views的任何地方都告訴我們它的'接收是json?'的數據嗎?我不確定 – Ycon

+0

通常你不必指定它。但正如@JohnPoison所說的,你發送的數據不喜歡,但是你綁定JSON文件的var就像。也許問題來自於此。 – Storm

+0

不喜歡/喜歡是一個錯字。我如何告訴休息觀點期望json? – Ycon