【发布时间】:2016-03-30 17:45:18
【问题描述】:
我可以在我的终端(本地测试)中看到“发布”正在发生。但数据永远不会到达。在浏览器中,它告诉我一个 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 网络检查器的结果:
【问题讨论】:
-
我看到您将不喜欢的变量作为数据传递,但我在代码中没有发现不喜欢的变量。这里不应该是“喜欢”吗?
-
这是一个错字 - 已修正。难道是我需要将“views.ObjectGetMixin”更改为“views.ObjectPostMixin”?如果是这样,我该怎么做?
-
将异常的详细信息传递给响应会很有用
-
@JohnPoison,请告诉我如何将响应的详细信息传递给异常
标签: angularjs api django-rest-framework