2013-10-23 3 views
0

등급 시스템을 설정 중이며 JSON 데이터를 장고보기로 활용하는 데 어려움을 겪고 있습니다. 최종 목표는 내 BlogSiteRating 모델로 평가를 저장하는 것입니다 :Django보기에서 JSON 데이터 사용

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

그러나, 나는 아직 확실히 그 시점에 아니에요. 내가 403 오류가 있었는데, 그 POST에서 올바르게 csrf 토큰을 사용하여 해결되었습니다. 이제 500 개의 오류가 서버에서 다시 전달됩니다.이 오류는 Chrome 콘솔에서 볼 수 있습니다.

EDIT : 마지막으로 오류를 발견했습니다. 2 개의 POST가 수행됩니다. 둘 다 MultiValueDictKeyError 오류가 발생합니다.

첫 번째 메시지는 "< QueryDict : {u'rating [rating]": [u'10 '], [csrfmiddlewaretoken]': [u '0468d70cfb6fc425a530d434f5a4c30a'], [rateid] u'rating ': [u'7는']}>

두 번째는 말한다 : < QueryDict "에서 찾을 수 없습니다 키 '평가'": {u'action '[U' ','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 데이터를 가져올 수 있다면 아무 문제없이 JSON 데이터를 저장할 수 있어야합니다. 그러나 당신이 원한다면 답안에서 그 코드를 도울 수 있습니다.


내가 지금 몇 일 동안 게시물을보고 있었고,이 경로를 날 실망 이끈 사람 중 일부는 다음과 같습니다

internal server eroor 500 django when using simplejson.loads(request.raw_post_data)

Getting internal server error when trying to handle json in django

내가 가진 또한 simplejson 대신 json을 가져 오기 위해 시도했지만 동일한 결과를 얻습니다. 나는 request.raw_post_data도 사용하여 놀았지만 그 방법으로 서버 오류가 발생합니다. 내가 읽은 바로는 요구와 비슷해 보입니다. [ '등급'] 사용하는 것이 옳은가요? 나는 적어도 우리가 문제가 무엇인지 알아내는 데 도움이 할 수있는 몇 가지를 제안 할 수 있습니다

+1

어떤 오류 메시지가 표시됩니까? 예를 들어 Chrome의 검사기 도구를 사용하여 응답을 볼 수 있습니다. 발생하는 오류에 대한 지침을 제공해야합니다. – bouke

+0

또한 게시하는 데이터를 검사하십시오. JSON 인코딩, 또는 일반 formdata 인코딩입니까? – bouke

+0

마지막으로 오류를 발견했습니다. "이고 CONTENT_TYPE은 'application/x-www-form-urlencoded입니다. charset = UTF-8 '유니 코드 객체를 반환하는 것처럼 보입니까? – awwester

답변

0

의견을 남김 - 2 개 문제가 있습니다.

먼저 JS에서 POST가 2 번 수행되었음을 확인했습니다. 실제로 JS 중 하나를 쓸 필요가 없었습니다. JRating은 자체적으로 POST를 수행하고 플러그인의 설정에서 설정 한 변수로 전송했습니다.

다른 문제 (더 중요한 문제)는 views.py에있었습니다. 그것이 JS에서 설정 한 것이기 때문에 나는 'rating'이라는 변수를 기대하고있었습니다. 실제로는 각 변수를 개별적으로 가져와야하고 POST 호출 중 하나는 평가 변수를 사용하지 않았습니다.

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)) 
0

: 당신이 전체 역 추적 결과와하지를 얻을 수 있도록

  1. 는 설정에서 DEBUG = 진정한 설정 모델을 사용 인쇄 요청 [ 'POST']

  2. : 단지 500

  3. 은 우리에게 당신이보기에 들어갈 답을 게시 양식을 기반으로 양식을 작성하고 Django에 내장 된 양식 유효성 검사를 사용하여 데이터를 처리하십시오.

희망이 있습니다.

+0

DEBUG를 True로 설정했지만 오류 페이지가 표시되지 않습니다. AJAX 요청 일 가능성이 높습니다. Chrome의 콘솔 로그에 500 오류가 표시됩니다. 인쇄물을 통해 데이터를 보려고했지만 아무 것도 볼 수 없었습니다. 그 줄에 오류를 추가하면 아무 것도 볼 수 없습니다. 또한 리눅스 오류 로그에 아무것도 표시되지 않습니다. (오류를 볼 수 있도록 다른 방법을 제안하거나 다른 곳을 볼 수 있습니까? # 3 의미가 있습니다. 보기에서 데이터를 볼 수있게 된 후 – awwester

+0

크롬 디버그 콘솔에서 500 응답의 세부 정보를 볼 수 있어야합니다. ajax 오류를 클릭하고 응답을 볼 수 있는지 확인하십시오. – hwjp

+0

Ok, "WSGIRequest '개체에'__getitem__ '특성이 없습니다."요청을 인쇄 할 때이 오류 메시지가 표시됩니다.'POST (오류 메시지가 나타납니다. '], 게시물 데이터에'rate u'11 '조치가 포함되어 있음을 알 수 있습니다. idBox \t u'7' – awwester

관련 문제