Wie kann ich CORS in meinem Django REST Framework aktivieren? die reference hilft nicht viel, es sagt, dass ich durch eine Middleware tun kann, aber wie kann ich das tun?Wie kann ich CORS in Django REST Framework aktivieren?
Antwort
Der Link, den Sie in Ihrer Frage verwiesen empfiehlt django-cors-headers
verwenden, deren documentation sagt der Bibliothek
pip install django-cors-headers
zu installieren und es dann auf Ihre installierten Anwendungen hinzufügen:
INSTALLED_APPS = ( ... 'corsheaders', ... )
Sie werden auch Sie müssen eine Middleware-Klasse hinzufügen, um Antworten zu hören:
MIDDLEWARE_CLASSES = ( ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', ... )
Sie möchten vielleicht auch the configuration section seiner Dokumentation durchsuchen.
Sie können dies tun, indem Sie eine benutzerdefinierte Middleware verwenden, obwohl Sie wissen, dass die beste Option die getestete Methode des Pakets django-cors-headers
ist. Mit dieser sagte, hier ist die Lösung:
erstellen Sie die folgende Struktur und Dateien:
- 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
hinzufügen settings.py
die markierte Zeile:
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
und fügen Sie es dann auf Ihre installierten Anwendungen:
INSTALLED_APPS = (
...
'corsheaders',
...
)
Sie werden auch eine Middleware-Klasse hinzufügen müssen auf Antworten hören in:
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',
)
mehr Details : https://github.com/ottoyiu/django-cors-headers/#configuration
lesen die offizielle Dokumentation lösen können fast alle Problem
Falls jemand auf diese Frage und die Entscheidung immer wieder ihre eigene Middleware zu schreiben, dies ist ein Codebeispiel für Djangos neue Art Middleware -
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
tun Sie kennen Sie eine andere Möglichkeit, dies zu tun, ohne eine neue Abhängigkeit installieren zu müssen? Ich versuche jetzt eine Middleware-Klasse zu erstellen –
@JulioMarins, warum würden Sie Ihre eigene Version schreiben, wenn diese leicht verfügbar und leicht installierbar ist, mit 12 Veröffentlichungen, 21 Mitwirkenden, über 800 Sternen und über 100 Gabeln? – Chris
Sie haben einen Punkt in der Tat, aber da die einzige Notwendigkeit für eine einfache CORS ist eine Kopfzeile Access-Control-Allow-Origin: * 'Ich sehe nicht, warum eine ganze Sache zu laden, werde ich einen anderen Weg, dies zu tun Ihre Antwort, damit beide Methoden zur Verfügung stehen. Referenz: [Link (] http: // Aktivieren-Kors.org/server.html) –