【问题标题】:HTTP Post giving 200, but no data arriving. Exception handlingHTTP Post 给出 200,但没有数据到达。异常处理
【发布时间】: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


【解决方案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'})

【讨论】:

  • 谢谢,但这不起作用。我是否在我的 rest_views 中告诉过它接收的数据是 json?我不确定
  • 通常您不必指定它。但正如@JohnPoison 所说,您将不喜欢作为数据发送,但是您将 JSON 文档绑定到的 var 就像。也许问题就出在于此。
  • 不喜欢/喜欢是一个错字。我怎样才能告诉休息视图期待 json?
  • Rest 框架检查传入请求中发送的 Content-Type 标头以确定要使用的解析器。如果您只想允许它期望 JSON 内容,请将“rest_framework.parsers.JSONParser”添加到默认解析器集中。请参阅django-rest-framework.org/api-guide/parsers/… 了解更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-09
  • 2022-01-11
  • 1970-01-01
  • 2020-04-28
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多