¿Cómo puedo habilitar CORS en mi marco Django REST? la referencia no ayuda mucho, dice que puedo hacerlo mediante un middleware, pero ¿cómo puedo hacer eso?
python
django
cors
django-rest-framework
middleware
Julio Marins
fuente
fuente
Access-Control-Allow-Origin: *
, no veo por qué cargar todo, pondré otra forma de hacer esto en su respuesta para que ambos métodos puedan estar disponibles. referencia: [link (] enable-cors.org/server.html )django-cors-headers
es mucho más flexible que eso. Si prefiere crear su propia clase, sea mi invitado. Pero estaría usando esa biblioteca.y luego agréguelo a sus aplicaciones instaladas:
También deberá agregar una clase de middleware para escuchar las respuestas:
más detalles: https://github.com/ottoyiu/django-cors-headers/#configuration
leer la documentación oficial puede resolver casi todos los problemas
fuente
CORS_ORIGIN_ALLOW_ALL = True
, peroCORS_ORIGIN_WHITELIST
todavía está establecido? Los documentos parecen hacer que parezca que esto no es necesario y parece ser confuso para la respuesta aquí.'corsheaders.middleware.CorsMiddleware',
debe estar en la parte superior de la lista, de lo contrario, la conexión puede rechazarse antes de acceder a ella.Puede hacerlo mediante el uso de un middleware personalizado, aunque sepa 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
-
myapp/middleware/corsMiddleware.py
agregar a
settings.py
la línea marcada:fuente
from . import corsMiddleware
En caso de que alguien vuelva a esta pregunta y decida escribir su propio middleware, esta es una muestra de código para el nuevo estilo de middleware de Django:
fuente
Para las versiones de Django> 1.10, de acuerdo con la documentación , se puede escribir un MIDDLEWARE personalizado como una función, digamos en el archivo:
yourproject/middleware.py
(como hermano desettings.py
):y finalmente, agregue la ruta de Python de esta función (escriba la raíz de su proyecto) a la lista MIDDLEWARE en su proyecto
settings.py
:¡Pan comido!
fuente
open_access_middleware
.Bueno, no conozco chicos pero:
usando aquí python 3.6 y django 2.2
Cambiar el nombre de MIDDLEWARE_CLASSES a MIDDLEWARE en settings.py funcionó.
fuente
A continuación se muestran los pasos de trabajo sin la necesidad de ningún módulo externo:
Paso 1: crea un módulo en tu aplicación.
Por ejemplo, supongamos que tenemos una aplicación llamada user_registration_app . Explore user_registration_app y cree un nuevo archivo.
Llamemos a esto como custom_cors_middleware.py
Pegue la siguiente definición de clase:
Paso 2: registrar un middleware
En el archivo settings.py de su proyecto, agregue esta línea
'user_registration_app.custom_cors_middleware.CustomCorsMiddleware'
P.ej:
Recuerde reemplazar user_registration_app con el nombre de su aplicación donde ha creado su módulo custom_cors_middleware.py.
¡Ahora puede verificar que agregará los encabezados de respuesta requeridos a todas las vistas en el proyecto!
fuente
Seguir las instrucciones oficiales no funciona
Finalmente, usa la forma antigua para resolverlo.
AÑADIR:
fuente