2012-05-09 3 views
5

Angularjs와 $ http 모듈을 사용하여 POST AJAX 요청을 Django 서버로 보냅니다. 다음은 그 예입니다.angularjs에서 django로 데이터를 전송합니다.

문제는 장고에 있습니다. 내가 보낸 데이터가 항상 QueryDict의 키이고 그 객체와 값은 항상 빈 목록입니다.

<QueryDict: {u'test data': [u'']}> 

이유가 없습니다. 내가 뭘 놓치고 있니?

나는 디폴트 미들웨어만을 사용하는 거의 기본으로 생성 된 Django 애플리케이션을 사용합니다. 나는 단지보기를 만들고 url config에 url을 설정했다. 장고의 버전은 1.3입니다. 그리고 나는 angular의 $ http 모듈을 구성하여 django를 만족시키기 위해 항상 csrf 토큰을 포함하는 헤더를 보냈습니다.

답변

6

장고는 당신이 urlencoded form을 보내고 있다고 생각합니다. 키 = 값 & 키 2 = 값 2 ...

당신은 시도를하려는 경우 :

$http({ 
    method: 'POST', 
    url: '/url/', 
    data: 'test=data' 
}) 

당신은 (원시 본문 내용)

<QueryDict: {u'test': [u'data']}> 

당신은 항상 데이터를 얻을 수 있습니다 가야 다음과 같이 :

request.body 

희망하시는 것입니다.

+0

고맙습니다. 하지만 왜 장고가 urlencoded 데이터를 생각하는지 설명 할 수 있습니까? 그리고 그것을 사용자 정의 할 수 있다면? – davekr

+1

request.GET 및 request.POST에는 사전 처리 된 키/값 데이터가 들어 있습니다. 원시 데이터 (예 : JSON 또는 일반 텍스트)를 사용하려면 try : request.raw_post_data –

7

jQuery param 함수를 사용하여이를 해결했습니다. 나는 그것이 더 우아한 해결책이라고 생각한다.

$http({ 
    method: 'POST', 
    url: '/url/', 
    data: $.param({test: data}) 
}) 

이제 원했던 것처럼 작동합니다.

관련 문제