the resource requested present origin framework csrf_exempt control allow python django cors django-rest-framework middleware

python - resource - ¿Cómo puedo habilitar CORS en Django REST Framework?



django rest framework cors (6)

¿Cómo puedo habilitar CORS en mi Django REST Framework? la reference no ayuda mucho, dice que puedo hacerlo con un middleware, pero ¿cómo puedo hacer eso?


El enlace al que hizo referencia en su pregunta recomienda usar django-cors-headers , cuya documentation dice que instale la biblioteca

pip install django-cors-headers

y luego agréguelo a sus aplicaciones instaladas:

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

También deberá agregar una clase de middleware para escuchar las respuestas:

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

También es posible que desee explorar la sección de configuración de su documentación, prestando especial atención a las diversas configuraciones de CORS_ORIGIN_ .


En caso de que alguien vuelva a esta pregunta y decida escribir su propio middleware, este es un ejemplo de código para el nuevo middleware de estilo de 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


Para las versiones de Django> 1.10, según la documentation , se puede escribir un MIDDLEWARE personalizado como una función, digamos en el archivo: yourproject/middleware.py (como un hermano de 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

y finalmente, agregue la ruta de Python de esta función (wrt la raíz de su proyecto) a la lista MIDDLEWARE en settings.py de su proyecto:

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

¡Pan comido!


Puede hacerlo utilizando un middleware personalizado, aun sabiendo que la mejor opción es utilizar el enfoque probado del paquete django-cors-headers . Dicho esto, aquí está la solución:

cree la siguiente estructura y archivos:

- 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

agregue a settings.py la línea marcada:

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 )


También es posible que deba agregar el modelo CorsModel a su base de datos. Estaba obteniendo excepciones al intentar eliminarlo de otra manera.

python3 manage.py makemigrations corsheaders python3 manage.py migrate


pip install django-cors-headers

y luego agréguelo a sus aplicaciones instaladas:

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

También deberá agregar una clase de middleware para escuchar las respuestas:

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'', ]

Más detalles: https://github.com/ottoyiu/django-cors-headers/#configuration

leer la documentación oficial puede resolver casi todos los problemas