복붙노트

[PYTHON] Jquery 및 Django CSRF 토큰

PYTHON

Jquery 및 Django CSRF 토큰

나는 2 html 페이지 있습니다.

부모 페이지 및 하위 페이지. 하위 페이지 Ajax 메시지를 제출하기 위해 상위 페이지에서 코드를 실행하는 제출 단추가 들어 있습니다.

$ .load () 메서드를 사용하여 하위 페이지를로드 한 다음 버튼을 클릭하면 $ .ajax .POST 메서드가 실행됩니다. 이 포스트 메소드는 JSON String만을 파이썬 코드로 전달합니다.

IE를 제외한 모든 브라우저에서이 작업을 수행하면 정상적으로 작동합니다. 그러나 IE에서이 코드를 실행할 때. CSRF 토큰에 대한 Python / Django 오류가 발생합니다.

그 이유는 자식 페이지가 서버 측 코드가 실행되는 현재 페이지 자체를 새로 고치기 때문이라고 생각합니다.

아무도 내가이 일을 어떻게해야하는지 알지 못한다.

건배,

해결법

  1. ==============================

    1.POST와 함께 csrf 토큰을 전달하지 않습니다. 내가 데이터에서 한 것을 해보십시오. 그것은 csrf 토큰 (또는 자신의 메서드)을 가져 와서 인수에 전달하는 것입니다.

    POST와 함께 csrf 토큰을 전달하지 않습니다. 내가 데이터에서 한 것을 해보십시오. 그것은 csrf 토큰 (또는 자신의 메서드)을 가져 와서 인수에 전달하는 것입니다.

    $.ajax({
        url : url,
        type: "POST",
        data : {csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value},
        dataType : "json",
        success: function( data ){
            // do something
        }
    });
    
  2. ==============================

    2.POST 요청 본문을 보내는 경우 대신 csrf 토큰을 요청 헤더로 추가하는 것이 더 쉽습니다. 토큰을 사용하여 요청 본문을 복잡하게 만들지 않으므로이 방법을 읽기가 더 쉽습니다. 대부분의 AJAX 요청은 csrf 토큰을 Django 문서에서 제안하는대로 헤더로 보냅니다.

    POST 요청 본문을 보내는 경우 대신 csrf 토큰을 요청 헤더로 추가하는 것이 더 쉽습니다. 토큰을 사용하여 요청 본문을 복잡하게 만들지 않으므로이 방법을 읽기가 더 쉽습니다. 대부분의 AJAX 요청은 csrf 토큰을 Django 문서에서 제안하는대로 헤더로 보냅니다.

    function startTest(testId) {
      var payload = JSON.stringify({
        test_id : testId
      });
      $.ajax({
        url: "/test-service/",
        method: "POST",
        headers: {'X-CSRFToken': '{{ csrf_token }}'},
        data: payload,
        dataType: "json"
      }).done(function(response) {
        console.log(response.id + " " + response.name);
      }).fail(function (error) {
          console.log(error);
      });
    }
    
  3. ==============================

    3.CSRF와 AJAX에 관한 문서들 :

    CSRF와 AJAX에 관한 문서들 :

    예제 (문서에서 가져온 것)

    또는 쿠키와 상호 작용하는 다른 방법을 사용할 수 있습니다.

  4. from https://stackoverflow.com/questions/8614947/jquery-and-django-csrf-token by cc-by-sa and MIT license