Django REST Framework에서 CORS를 활성화하려면 어떻게 해야 합니까?
장고 REST 프레임워크에서 CORS를 활성화하려면 어떻게 해야 합니까?참조는 별로 도움이 되지 않습니다. 미들웨어로 할 수 있다고 되어 있습니다만, 어떻게 해야 합니까?
질문에서 참조한 링크는 를 사용할 것을 권장합니다. 이 링크의 문서에는 라이브러리를 설치하라는 내용이 나와 있습니다.
python -m pip install django-cors-headers
설치된 앱에 추가합니다.
INSTALLED_APPS = (
...
'corsheaders',
...
)
응답을 청취하려면 미들웨어 클래스도 추가해야 합니다.
MIDDLEWARE = [
...,
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...,
]
CORS에 대한 도메인을 지정합니다. 예:
CORS_ALLOWED_ORIGINS = [
'http://localhost:3030',
]
문서의 구성 섹션을 살펴보십시오. 특히 다양한 정보에 주의하십시오.CORS_ORIGIN_
설정. 에 따라 필요에 따라 설정해야 합니다.
python -m pip install django-cors-headers
설치된 앱에 추가합니다.
INSTALLED_APPS = [
...
'corsheaders',
...
]
응답을 청취하려면 미들웨어 클래스도 추가해야 합니다.
MIDDLEWARE = [
...,
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...,
]
CORS_ALLOW_ALL_ORIGINS = True # If this is used then `CORS_ALLOWED_ORIGINS` will not have any effect
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = [
'http://localhost:3030',
] # If this is used, then not need to use `CORS_ALLOW_ALL_ORIGINS = True`
CORS_ALLOWED_ORIGIN_REGEXES = [
'http://localhost:3030',
]
자세한 내용: https://github.com/ottoyiu/django-cors-headers/ #구성
공식 문서를 읽으면 거의 모든 문제를 해결할 수 있습니다.
된 접근 하는 것임을 사용자 미들웨어를 할 수 .django-cors-headers
따라서 솔루션은 다음과 같습니다.
다음 구조 및 파일을 만듭니다.
-- myapp/middleware/__init__.py
from corsMiddleware import corsMiddleware
-- myapp/middleware/corsMiddleware.py
class corsMiddleware(object):
def process_response(self, req, resp):
resp["Access-Control-Allow-Origin"] = "*"
return resp
에 더하다.settings.py
표시된 선:
MIDDLEWARE_CLASSES = (
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
# Now we add here our custom middleware
'app_name.middleware.corsMiddleware' <---- this line
)
이 질문으로 돌아가서 자신만의 미들웨어를 쓰기로 결정하는 사람이 있다면, 이것은 장고의 새로운 스타일 미들웨어의 코드 샘플입니다.
class CORSMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
response["Access-Control-Allow-Origin"] = "*"
return response
Django 버전이 1.10 이상인 경우 설명서에 따라 사용자 정의 미들웨어를 함수로 작성할 수 있습니다. 파일에서 다음과 같이 가정합니다.yourproject/middleware.py
로서)settings.py
):
def open_access_middleware(get_response):
def middleware(request):
response = get_response(request)
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Headers"] = "*"
return response
return middleware
마지막으로 r.t합니다.settings.py
:
MIDDLEWARE = [
.
.
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'yourproject.middleware.open_access_middleware'
]
진정해요!
다음은 외부 모듈이 필요 없는 작업 단계입니다.
1단계: 앱에 모듈을 만듭니다.
예를 들어, user_registration_app이라는 앱이 있다고 가정합니다.user_registration_app을 탐색하고 새 파일을 만듭니다.
이를 custom_cors_middleware라고 부릅니다.파이의
아래 클래스 정의를 붙여넣습니다.
class CustomCorsMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = self.get_response(request)
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Headers"] = "*"
# Code to be executed for each request/response after
# the view is called.
return response
2단계: 미들웨어 등록
프로젝트 settings.py 파일에서 이 행을 추가합니다.
'user_registration_app.custom_middleware.CustomCors 미들웨어'
예:
MIDDLEWARE = [
'user_registration_app.custom_cors_middleware.CustomCorsMiddleware', # ADD THIS LINE BEFORE CommonMiddleware
...
'django.middleware.common.CommonMiddleware',
]
user_registration_app을 custom_cors_middleware.py 모듈을 만든 앱의 이름으로 바꾸는 것을 잊지 마십시오.
이제 프로젝트의 모든 보기에 필요한 응답 헤더가 추가되는지 확인할 수 있습니다!
Django v3.x.x의 최신 버전을 사용하는 모든 사람을 위해 2021년 업데이트된 모든 원산지에서 CORS를 허용하는 단계는 아래와 같습니다.
1단계: 필요한 라이브러리 설치
pip install django-cors-headers
2단계: 그런 다음 INSTALLED_APPs에서 적절한 위치에 추가합니다.settings.py
에 rest_framework
에 그리당고신청전에의신▁and전에▁your▁before신그ation청.myapp
'rest_framework',
'corsheaders',
'myapp.apps.MyAppConfig',
합니다(내부 3단계: api의 경우).settings.py
)
CORS_ORIGIN_WHITELIST = (
'http://localhost:3000', # for localhost (REACT Default)
'http://192.168.10.45:3000', # for network
)
2022년 업데이트 및 새로운 사용 사례 추가
Axios POST를 withCredentials: true
고려해야 할 몇 가지 추가 옵션이 있습니다.
Basic 또는 Session 로그인을 통한 인증에 이 특정 사례를 사용했습니다.
다음과 같이 오류 메시지를 방지하려면:
비행 전 요청에 대한 응답이 액세스 제어 검사를 통과하지 못했습니다.응답에서 'Access-Control-Allow-Credentials' 헤더의 값은 '참'입니다. 요청의 자격 증명 모드가 '포함'인 경우 이 값은 '참'이어야 합니다.XMLHttpRequest에 의해 시작된 요청의 자격 증명 모드는 withCredentials 특성에 의해 제어됩니다.
그리고 다른 사람들이 언급한 위의 내용.저는 이런 식으로 문제를 해결했습니다.
[IP 주소는 제 지역 사례에서 가져온 것입니다. 변경하려고 합니다.]
설정파이의
INSTALLED_APPS = [
...
'rest_framework',
'corsheaders',
'rest_framework.authtoken',
...
]
ALLOWED_HOSTS = ["localhost","192.168.0.50"]
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = (
'http://localhost:3000', # for localhost (REACT Default)
'http://192.168.0.50:3000', # for network
'http://localhost:8080', # for localhost (Developlemt)
'http://192.168.0.50:8080', # for network (Development)
)
CSRF_TRUSTED_ORIGINS = [
'http://localhost:3000', # for localhost (REACT Default)
'http://192.168.0.50:3000', # for network
'http://localhost:8080', # for localhost (Developlemt)
'http://192.168.0.50:8080', # for network (Development)
]
MIDDLEWARE = [
...
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'corsheaders.middleware.CorsMiddleware',
...
]
브라우저에서 Axios 요청 헤더를 전송하고 서버 사이트에서 헤더를 허용해야 합니다.그렇지 않으면 오류 메시지가 표시됩니다.
요청 헤더 필드 access-control-allow-origin은 비행 전 응답에서 Access-Control-Allow-Headers에 의해 허용되지 않습니다.
지금까지 머리글을 사용합니다.필요한 경우 다음과 같은 헤더를 추가할 수 있습니다.
CORS_ALLOW_HEADERS = [
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
]
건배 :)
글쎄, 남자들은 모르지만,
여기서 python 3.6 및 django 2.2 사용
설정에서 MIDDLEWARE_CLASSES의 이름을 MIDDLEWARE로 변경합니다.py worked.
처음 설치된 장고 패키지
pip install django-cors-headers
설정 파일의 앱에 추가
INSTALLED_APPS = (
...
'corsheaders',
...
)
그런 다음 설정 파일에 코르스 미들웨어를 추가합니다.
MIDDLEWARE = [
...,
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...,
]
그리고 마지막으로 교차 오리진 화이트리스트를 추가합니다.
#CORS_ORIGIN_ALLOW_ALL = True
#CORS_ALLOW_CREDENTIALS = True
#CORS_ALLOW_HEADERS = ['*']
CORS_ORIGIN_WHITELIST = ('http://localhost:5000',)
코르스 오류를 쉽게 해결할 수 있습니다.해피 코딩
장고=2.2.12 장고-고-고-고-고=3.2.1 장고레스트 프레임워크=3.11.0
공식 지침을 따르면 작동하지 않습니다.
마지막으로 오래된 방법을 사용하여 해결합니다.
추가:
# proj/middlewares.py
from rest_framework.authentication import SessionAuthentication
class CsrfExemptSessionAuthentication(SessionAuthentication):
def enforce_csrf(self, request):
return # To not perform the csrf check previously happening
#proj/settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'proj.middlewares.CsrfExemptSessionAuthentication',
),
}
모든 제안된 해결책을 시도해 본 결과 아무 것도 효과가 없는 것 같았습니다.브라우저 캐시를 삭제하여 문제를 해결했습니다.
그런 다음 승인된 답변은 다음을 사용하여 작동합니다.django-cors-headers
.
이것이 다른 누군가에게 도움이 되기를 바랍니다!
언급URL : https://stackoverflow.com/questions/35760943/how-can-i-enable-cors-on-django-rest-framework
'programing' 카테고리의 다른 글
Spark, Python 및 MongoDB가 함께 작동하도록 하기 (0) | 2023.07.06 |
---|---|
iOS에서 Phonegap을 사용하여 방향 변경을 올바르게 감지하려면 어떻게 해야 합니까? (0) | 2023.07.06 |
Oracle에서 삭제 및 삭제 간의 차이 (0) | 2023.07.06 |
UIScrollView에서 스크롤 방향을 찾으십니까? (0) | 2023.07.06 |
요소가 특정 값 VBA인 경우 배열에서 요소 삭제 (0) | 2023.07.06 |