0

我正在建立一个评级系统,并且正在努力将 JSON 数据利用到我的 Django 视图中。最终目标是将评分保存到我的 BlogSiteRating 模型中:

#models.py
class BlogSiteReview(models.Model):
  blog_site = models.ForeignKey(BlogSite)
  review_rating = models.IntegerField()

但是,我还没有到那个地步。我遇到了 403 错误,但已通过在 POST 中正确使用 csrf 令牌解决了这些错误。现在我收到从服务器传回的 500 错误,可以在 chrome 控制台中看到。

编辑:终于找到了错误。有 2 个 POST 正在执行。两者都给出 MultiValueDictKeyError 错误

第一个说:“< QueryDict: {u'rating[rating]': [u'10'], u'rating[csrfmiddlewaretoken]': [u'0468d70cfb6fc425a530d434f5a4c30a'], u'rating[ rateid]': [u'7']}>

第二个说:“在 <QueryDict: {u'action': [u'rating'], u'rate': [u'10'], u'idBox': [u'7 ']}>"

这是我传递给我的视图的 JSON。

//JSON object being passed into views.py
$(".rating").jRating({
      onSuccess : function(element,rate){
          var rating = [
            { "id":element.id.replace('rating', ''), "rating":rate}
          ];

          rating["csrfmiddlewaretoken"] = $('input[name=csrfmiddlewaretoken]').val();

          alert("Passed id:" + element.id.replace('rating', '') + " and rating:" + rate);

          //send post data to django view
          $.post('/blogsearch/setrating/', {"rating":rating}, function(msg)
            {
                if(msg.error == "yes")
                {console.log('Error Found: '+ msg.errorMsg);}
            }, 'json');
      },
      onError : function(){
        alert('Error : please retry again later, the server did not accept your submission.');
      }
    });

最后,这是我在 views.py 中的内容:

#views.py
from django.http import HttpResponse
from django.utils import simplejson

def setrating(request):
    if request.is_ajax():
        if request.method == 'POST':
            simplejson.loads(request.POST['rating'])
            #data = 1 #Note: when I uncomment this line, and 
                      #comment the above line, I don't get a 500 error
    return HttpResponse("success")

另外,我知道在这个例子中我没有尝试在我的模型中保存任何东西。如果我可以在我的视图中获取 JSON 数据,我应该能够从那里毫无问题地保存它。但是,如果您愿意,可以在答案中提供该代码的帮助。


这几天我一直在看帖子,其中一些使我走上这条道路的帖子是:

使用 simplejson.loads(request.raw_post_data) 时,内部服务器 eroor 500 django

尝试在 django 中处理 json 时出现内部服务器错误

我也尝试过导入 json 而不是 simplejson,我得到了相同的结果。我也尝试过使用 request.raw_post_data ,但是使用该方法时出现服务器错误。从我读到的看起来 request.POST['rating'] 是正确的使用方法?

4

2 回答 2

0

我可以提出一些建议,至少可以帮助我们找出问题所在:

  1. 在您的设置中设置DEBUG = True以便您可以在结果中获得整个回溯,而不仅仅是 500。

  2. 将您在视图中得到的答案发布给我们:打印请求['POST']

  3. 根据您的模型使用 ModelForm 并使用 Django 内置表单验证来帮助您处理数据。

希望能帮助到你。

于 2013-10-23T18:10:59.970 回答
0

明白了 - 有 2 个问题。

首先,在 JS 中,我注意到有 2 个 POST 正在执行。我实际上不需要编写任何 JS,JRating 自己执行 POST,并将其发送到我在插件设置中设置的变量。

另一个问题(更重要的问题)在views.py 中。我期待一个名为“rating”的变量,因为这是我在 JS 中设置的。实际上,我需要分别获取每个变量,其中一个 POST 调用甚至没有使用 rating 变量。

def setrating(request):
    if request.is_ajax():
        if request.method == 'POST':
            rating = json.loads(request.POST['rate'])
            id = json.loads(request.POST['idBox'])
    return HttpResponse("the rating for " + str(id) + " is " + str(rating))
于 2013-10-25T14:02:19.003 回答