Permitir CORS

Objetivo #

Habilitar la opción del CORS en Django. Es decir, permitir que Django reciba peticiones desde otros origines distintos.

Para ello hay que instalar en el proyecto de Django el paquete django-cors-headers mediante el siguiente comando:

pip install django-cors-headers

A continuación hay que editar el fichero settings.py del proyecto y realizar lo siguiente:

  1. En la variable INSTALLED_APPS hay que añadir ‘corsheaders’
  2. En la variable MIDDLEWARE hay que añadir antes de django.middleware.common.CommonMiddleware y después de django.middleware.security.SecurityMiddleware lo siguiente:
    'corsheaders.middleware.CorsMiddleware',

El motivo de poner después del django.middleware.security.SecurityMiddleware es porque estoy usando autentificación con CSRF y tiene que estar después. Y tiene que estar antes de django.middleware.common.CommonMiddleware porque se debe añadir en cabecera del CORS justo antes de cualquier respuesta que pueda dar Django.

  1. Se añade las URLS donde va a recibir las peticiones. Se puede hacer para todas las URLs, mirar la documentación del paquete para más información, pero en mi caso lo voy acotar al servidor de React NextJS:
# Servidores donde se permite que hagan llamadas a django
CORS_ALLOWED_ORIGINS = [
    "http://localhost:3000"
]

# Servidores donde se permite el funcionamiento de CSRF.
CSRF_TRUSTED_ORIGINS = ['localhost:3000']

En la primera variable permitimos llamadas desde cualquier página de NextJS. Y la segunda permitimos autentificación CSRF entre NextJs y Django. Si no se pusiera las cookie de sesión y CSRF no se generarían correctamente.