>  기사  >  웹 프론트엔드  >  Django 프레임워크에서 ajax post 메소드를 사용하는 방법

Django 프레임워크에서 ajax post 메소드를 사용하는 방법

亚连
亚连원래의
2018-05-25 09:42:292861검색

Django는 Python으로 작성된 오픈 소스 웹 애플리케이션 프레임워크입니다. 이 기사에서는 Django 프레임워크가 ajax post 메소드를 사용하는 방법을 소개합니다. 관심 있는 친구여, 와서 함께 배워보세요.

Django는 다음 언어로 작성된 오픈 소스 웹 애플리케이션 프레임워크입니다. 파이썬. MVC 소프트웨어 디자인 패턴, 즉 모델 M, 뷰 V 및 컨트롤러 C가 채택되었습니다. 원래 Lawrence Publishing Group의 일부 뉴스 콘텐츠 기반 웹사이트, 즉 CMS(Content Management System) 소프트웨어를 관리하기 위해 개발되었습니다. 그리고 2005년 7월 BSD 라이선스로 출시되었습니다. 이 프레임은 벨기에 집시 재즈 기타리스트 Django Reinhardt의 이름을 따서 명명되었습니다.

오늘 jQuery의 ajax를 호출하려고 할 때 문제를 발견했습니다. 즉, GET 메서드를 사용하면 서버가 정상적으로 반환되지만 POST 메서드를 사용하면 서버가 정상적으로 반환되지 않습니다. 나중에 양식 기반 POST 메서드 테스트도 작동하지 않았습니다. POST가 HTTP 403 오류를 보고하는 한! 매우 이상합니다. . .​

인터넷에서 많은 정보를 검색한 결과 Django의 Cross Site Request Forgery 보호 메커니즘에 문제가 있는 것으로 밝혀졌습니다. 이 메커니즘은 CSRF 공격으로부터 보호하기 위한 것입니다. crsf 공격이란 무엇입니까? Taolin 블로그에는 비교적 간단한 설명이 있습니다. 해결 방법 Django 공식 홈페이지 http://docs.djangoproject.com/en/dev/ref/contrib/csrf/를 제공하고 있으며, 안내에 따라 수정 후 원활하게 ajax를 게시할 수 있습니다.

구체적인 방법은 먼저 양식의 POST를 해결하는 것입니다. settings.py 파일에서 MIDDLEWARE_CLASSES를 찾아 미들웨어를 추가합니다: 'django.middleware.csrf.CsrfViewMiddleware'. 수정된 코드는 다음과 같습니다:

Python code

MIDDLEWARE_CLASSES = ( 
 'django.middleware.common.CommonMiddleware', 
 'django.contrib.sessions.middleware.SessionMiddleware', 
 'django.middleware.csrf.CsrfViewMiddleware', 
 'django.contrib.auth.middleware.AuthenticationMiddleware', 
 'django.contrib.messages.middleware.MessageMiddleware', 
 'django.middleware.csrf.CsrfResponseMiddleware', #加入这个中间件 
)


양식 POST 제출 시 HTTP 403 문제를 해결합니다. 이런 방식으로 ajax의 Post 제출을 변경하는 것만으로는 충분하지 않습니다. 또한 각 제출마다 쿠키 처리 프로세스를 연결해야 합니다. 즉, 제출할 때마다 이 프로세스가 트리거되고 csrf 토큰이 제출된 http 헤더에 추가됩니다. 다행스럽게도 jQuery를 사용하여 ajax를 처리하는 경우 Django는 문제를 해결하기 위해 코드 조각을 직접 보냅니다. 별도의 js 파일에 넣어서 html 페이지에 소개합니다. jquery js 파일을 가져온 후에 이 js 파일을 가져와야 합니다. 다음과 같이 코드를 직접 복사했습니다.

Js code

$('html').ajaxSend(function(event, xhr, settings) { 
 function getCookie(name) { 
  var cookieValue = null; 
  if (document.cookie && document.cookie != '') { 
   var cookies = document.cookie.split(';'); 
   for (var i = 0; i < cookies.length; i++) { 
    var cookie = jQuery.trim(cookies[i]); 
    // Does this cookie string begin with the name we want? 
    if (cookie.substring(0, name.length + 1) == (name + &#39;=&#39;)) { 
     cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 
     break; 
    } 
   } 
  } 
  return cookieValue; 
 } 
 if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { 
  // Only send the token to relative URLs i.e. locally. 
  xhr.setRequestHeader("X-CSRFToken", getCookie(&#39;csrftoken&#39;)); 
 } 
});

이 모든 고민 끝에 마침내 ajax를 사용하여 Django와 정상적으로 통신할 수 있게 되었습니다.

Django에서 ajax 사용

프런트엔드 ajax 코드는 다음과 같습니다.

$.ajax({
 type:&#39;GET&#39;,
 url:&#39;/store/ds_mgmt_wx/ajax_handle&#39;,
 dataType:&#39;html&#39;,
 success:function(data)
  {
   alert(data);
  },
 error:function(data)
 {
  alert(data); 
 }
});

백엔드의 해당 코드 반환 방법은 다음과 같습니다.

if act_job == &#39;ajax_handle&#39;:
  return HttpResponse(&#39;ajax_handle&#39;)

The 위 내용은 제가 모두를 위해 정리한 내용입니다. 앞으로 모든 사람에게 도움이 되기를 바랍니다.

관련 기사:

동적 페이징 구현을 위한 ajax + jtemplate에 대한 자세한 설명

요청 프로세스 중 진행 상황을 보여주는 Ajax의 간단한 구현

JQuery Ajax가 동적으로 테이블을 생성

위 내용은 Django 프레임워크에서 ajax post 메소드를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.