Django에서 Ajax의 POST 시에 csrf_token 추가하기

Django 에서 폼이 post 형식으로 데이터를 보낼 때 {% csrf_token %}을 쓰도록 되어 있다.

그런데 jquery 나 다른 Ajax 와 같이 외부 스크립트에서는 위의 태그를 사용하지 못하는데, 이를 해결 하는 방법으로 아래 공식 문서가 있기는 하다.

https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax

위 스크립트를 통해서 해결을 할 수 있다고는 하는 것 같은데, 너무 복잡하게 되어 있다.

그러나 위 방법 말고도 다른 방법이 있는데, 문서에 보면 csrfmiddlewaretoken 이라는 이름으로 특정 값을 POST 시에 데이터로 같이 보내도록 되어 있다.
그리고 {{ csrf_token }} 변수가 그 값을 가지고 있는데, 이전에 올렸던 글처럼 변수를 미리 선언하여 외부 스크립트에 사용하는 방식으로 이를 해결할 수 있다.

템플릿:
<script type="text/javascript">
    var csrf_token = "{{ csrf_token }}";
</script>
<script type="text/javascript" src="/js/test.js">
외부 스크립트:
if (this.csrf_token === undefined)
    var csrf_token = '';

// POST로 보낼 데이터
var data = {
    'csrfmiddlewaretoken': csrf_token
}

이러한 방법(혹시 편법 일수도...?)으로 해결할 수 있다.

참고자료: http://stackoverflow.com/a/5407506

댓글 없음:

댓글 쓰기