我正在建立一个评级系统,并且正在努力将 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'] 是正确的使用方法?