Come posso abilitare CORS sul mio Django REST Framework? il reference non aiuta molto, dice che posso fare da un middleware, ma come posso farlo?Come posso abilitare CORS su Django REST Framework
risposta
Il link si fa riferimento nella sua interrogazione consiglia di utilizzare django-cors-headers
, il cui documentation dice di installare la libreria
pip install django-cors-headers
e poi aggiungerlo ai tuoi applicazioni installate:
INSTALLED_APPS = ( ... 'corsheaders', ... )
Avrete anche è necessario aggiungere una classe middleware per ascoltare le risposte:
MIDDLEWARE_CLASSES = ( ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', ... )
Si potrebbe anche voler sfogliare la documentazione the configuration section.
È possibile eseguire l'utilizzo di un middleware personalizzato, pur sapendo che l'opzione migliore è l'approccio testato del pacchetto django-cors-headers
. Detto questo, ecco la soluzione:
creare la seguente struttura e file:
- 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
aggiungere settings.py
la linea contrassegnata:
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
)
pip install django-cors-headers
e poi aggiungerlo ai tuoi applicazioni installate:
INSTALLED_APPS = (
...
'corsheaders',
...
)
Sarà inoltre necessario aggiungere una classe middleware per ascoltare le risposte:
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
)
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = (
'localhost:3030',
)
CORS_ORIGIN_REGEX_WHITELIST = (
'localhost:3030',
)
più dettagli : https://github.com/ottoyiu/django-cors-headers/#configuration
leggere la documentazione ufficiale in grado di risolvere quasi tutti i problemi
Nel caso qualcuno è tornare a questa domanda e di decidere di scrivere il proprio middleware, questo è un esempio di codice per il nuovo middleware lo stile di 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
Sei conoscere un altro modo per farlo, senza la necessità di installare una nuova dipendenza? Sto cercando di creare una classe middleware ora –
@JulioMarins, perché dovresti scrivere la tua versione quando questa è prontamente disponibile e facilmente installabile, con 12 versioni, 21 contributori, oltre 800 stelle e oltre 100 forchette? – Chris
Hai un punto in effetti, ma poiché l'unica necessità di un semplice CORS è un'intestazione 'Access-Control-Allow-Origin: *' Non vedo perché caricare un'intera cosa, metterò un altro modo per farlo in la tua risposta in modo che entrambi i metodi possano essere disponibili. riferimento: [link (] http: // enable-cors.org/server.html) –