Django 에서 ajax 크로스 도 메 인 접근 문 제 를 해결 합 니 다.
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 에 배 치 됩 니 다
앞부분 이 열 린 것 은'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',
)
큰 성 과 를 거두다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.