programing tip

Django REST Framework에서 CORS를 활성화하려면 어떻게해야합니까?

itbloger 2020. 11. 20. 08:41
반응형

Django REST Framework에서 CORS를 활성화하려면 어떻게해야합니까?


Django REST Framework에서 CORS를 활성화하려면 어떻게해야합니까? 참조 그것이 내가 미들웨어에 의해 할 수 있다고 많은 도움이되지 않습니다,하지만 난 어떻게 그렇게 할 수 있습니까?


당신이 사용하는 것이 좋습니다 귀하의 질문에 언급 된 링크 django-cors-headers누구의 문서 라이브러리를 설치 말한다

pip install django-cors-headers

그런 다음 설치된 앱에 추가하십시오.

INSTALLED_APPS = (
    ...
    'corsheaders',
    ...
)

또한 응답을 수신하기 위해 미들웨어 클래스를 추가해야합니다.

MIDDLEWARE_CLASSES = (
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
)

다양한 설정에 특히주의하면서 설명서 의 구성 섹션 을 찾아 볼 수도 있습니다 CORS_ORIGIN_.


pip install django-cors-headers

그런 다음 설치된 앱에 추가하십시오.

INSTALLED_APPS = (
    ...
    'corsheaders',
    ...
)

또한 응답을 수신하기 위해 미들웨어 클래스를 추가해야합니다.

MIDDLEWARE_CLASSES = (
    ...
    'corsheaders.middleware.CorsMiddleware',  
    'django.middleware.common.CommonMiddleware',  
    ...
)

CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = [
    'http://localhost:3030',
]
CORS_ORIGIN_REGEX_WHITELIST = [
    'http://localhost:3030',
]

자세한 내용 : https://github.com/ottoyiu/django-cors-headers/#configuration

공식 문서를 읽으면 거의 모든 문제를 해결할 수 있습니다.


최상의 옵션이 패키지의 테스트 된 접근 방식을 사용하는 것을 알고 있더라도 사용자 지정 미들웨어를 사용하여 수행 할 수 있습니다 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
)

누군가이 질문으로 돌아가서 자신의 미들웨어를 작성하기로 결정한 경우, 이것은 Django의 새로운 스타일 미들웨어에 대한 코드 샘플입니다.

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의 경우 문서 에 따르면 사용자 정의 MIDDLEWARE를 함수로 작성할 수 있습니다. 파일에서 다음 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

마지막으로 프로젝트의 MIDDLEWARE 목록에이 함수의 파이썬 경로 (프로젝트 루트 작성)를 추가합니다 settings.py.

MIDDLEWARE = [
  .
  .
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
  'yourproject.middleware.open_access_middleware'
]

쉬워요!


글쎄, 나는 사람들을 모르지만 :

using here python 3.6 and django 2.2

Renaming MIDDLEWARE_CLASSES to MIDDLEWARE in settings.py worked.


You may also need to add the CorsModel model to your database. I was getting exceptions while trying to flush it otherwise.

python3 manage.py makemigrations corsheaders
python3 manage.py migrate

참고URL : https://stackoverflow.com/questions/35760943/how-can-i-enable-cors-on-django-rest-framework

반응형