Django 에서 ajax 크로스 도 메 인 접근 문 제 를 해결 합 니 다.

이 글 은 주로 Django 크로스 도 메 인 요청 문제 해결 에 관 한 자 료 를 소개 합 니 다.이 글 에서 소개 한 실현 방법 은 django-cors-headers 전역 제어,JSonP 사용,Get 방법 및 views.py 에 응답 헤드 만 설정 하고 단일 인터페이스 만 제어 할 수 있 으 며 필요 한 친 구 는 참고 할 수 있 습 니 다.
Django 를 사용 하여 서버 에 API 를 써 서 JSON 데 이 터 를 되 돌려 줍 니 다.Ajax 를 사용 하여 이 API 를 호출 합 니 다:
그러나 크롬 브 라 우 저 알림 오류:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
이 는 CORS 로 인 한 것 이다.
CORS 가 무엇 입 니까?
CORS(크로스 도 메 인 자원 공유,Cross-Origin Resource Sharing)는 크로스 도 메 인 접근 체제 로 Ajax 가 크로스 도 메 인 접근 을 실현 할 수 있 습 니 다.
사실 서버 의 response header 에'Access-Control-Allow-Origin:*'을 추가 하면 CORS 를 지원 할 수 있 습 니 다.매우 간단 합 니 다.apache/nginx 등 어떻게 설정 하 는 지 참고 문 서 를 참조 하 십시오.
예 를 들 어:
API 는 DomainA 에 배 치 됩 니 다
  • Ajax 파일 이 DomainB 에 배치 되면 Ajax 파일 은 API 에 요청 을 보 내 고 데 이 터 를 되 돌려 줍 니 다
  • 사용자 가 DomainC 를 통 해 DomainB 의 Ajax 파일 을 방문 하고 데 이 터 를 요청 합 니 다

  • 앞부분 이 열 린 것 은'http://localhost:63343'주소,다른 하 나 는 django 서버 입 니 다.열 렸 습 니 다'.http://localhost:8000'주소,그래서'.http://localhost:63343'자 바스 크 립 트 맞아요'.http://localhost:8000'접근 할 때 포트 가 다 르 고 도 메 인 접근 에 속 합 니 다.
    django 에 전단 페이지 를 넣 으 면 도 메 인 접근 거부 가 나타 나 지 않 습 니 다.
    몇 가지 방법:
    1.JSONP 를 사용 하여 Ajax 를 사용 하여 json 데 이 터 를 가 져 올 때 도 메 인 간 제한 이 있 습 니 다.그러나 웹 페이지 에서 js 의 script 스 크 립 트 파일 을 호출 할 때 도 메 인 간 의 영향 을 받 지 않 습 니 다.JSONP 는 이 를 이용 하여 도 메 인 간 전송 을 실현 합 니 다.따라서 Ajax 호출 중인 dataType 을 JSON 에서 JSONP(해당 API 도 JSONP 지원)형식 으로 바 꿔 야 합 니 다.
    JSONP 는 GET 요청 에 만 사용 할 수 있 습 니 다.
    2.Django 의 views.py 파일 을 직접 수정 하여 views.py 에 대응 하 는 API 구현 함 수 를 수정 하고 다른 도 메 인 이 Ajax 를 통 해 데 이 터 를 요청 할 수 있 도록 합 니 다.
    
     def myview(_request): 
     response = HttpResponse(json.dumps({"key": "value", "key2": "value"}))
     response["Access-Control-Allow-Origin"] = "*" 
     response["Access-Control-Allow-Methods"] = "POST, GET, OPTIONS" 
     response["Access-Control-Max-Age"] = "1000" 
     response["Access-Control-Allow-Headers"] = "*" 
     return response 
    
    3.django-cors-headers 를 설치 합 니 다.여기 또 하나의 발견 이 있 습 니 다!Django 에서 CORS-header 의 middleware 를 개발 한 사람 이 있 습 니 다.settings.py 에서 만 간단 한 설정 을 하면 됩 니 다.CORS 를 켜 면 도 메 인 간 의 고민 이 없 으 니 시원 합 니 다!~
    django-cors-headers
    우선 설치
    
    pip install django-cors-headers
    그리고 settings.py 에 한 번 만 설정 하면 돼 요.
    
     INSTALLED_APPS = [ 
      ... 
      'corsheaders', 
      ... ] 
     MIDDLEWARE_CLASSES = ( 
      ... 
      'corsheaders.middleware.CorsMiddleware', 
      'django.middleware.common.CommonMiddleware', #      
      ... 
     ) 
    #       
    CORS_ALLOW_CREDENTIALS = True
    CORS_ORIGIN_ALLOW_ALL = True
    CORS_ORIGIN_WHITELIST = ( '*') 
    CORS_ALLOW_METHODS = ( 'DELETE', 'GET', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'VIEW', ) 
    CORS_ALLOW_HEADERS = ( 
    'XMLHttpRequest', 
    'X_FILENAME', 
    'accept-encoding', 
    'authorization', 
    'content-type', 
    'dnt',
    'origin', 
    'user-agent', 
    'x-csrftoken', 
    'x-requested-with', 
    'Pragma', 
    ) 
    
    큰 성 과 를 거두다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기