wake-up-neo.net

Wie kann ich CORS auf Django aktivieren? REST Rahmen

Wie kann ich CORS in meinem Django REST - Framework aktivieren? Die Referenz hilft nicht viel, es heißt, dass ich eine Middleware verwenden kann, aber wie kann ich das tun?

39
Julio Marins

Der Link, auf den Sie in Ihrer Frage verwiesen haben, empfiehlt die Verwendung von Django-cors-headers , dessen Dokumentation die Installation der Bibliothek angibt

pip install Django-cors-headers

und fügen Sie es dann zu Ihren installierten Apps hinzu:

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

Sie müssen außerdem eine Middleware-Klasse hinzufügen, um die Antworten anzuhören:

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

Möglicherweise möchten Sie auch in dem Konfigurationsabschnitt der Dokumentation suchen, wobei Sie die verschiedenen CORS_Origin_-Einstellungen besonders beachten.

65
Chris
pip install Django-cors-headers

und fügen Sie es dann zu Ihren installierten Apps hinzu:

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

Sie müssen außerdem eine Middleware-Klasse hinzufügen, um die Antworten anzuhören:

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

weitere Details: https://github.com/ottoyiu/Django-cors-headers/#configuration

lesen Sie die offizielle Dokumentation, um fast alle Probleme zu lösen

20
likaiguo.happy

Sie können dies tun, indem Sie eine angepasste Middleware verwenden, obwohl Sie wissen, dass die bewährte Methode des Pakets Django-cors-headers die beste Option ist. Nachdem dies gesagt wurde, ist hier 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

füge settings.py die markierte Zeile hinzu:

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
)
9
Julio Marins

Falls jemand auf diese Frage zurückkommt und beschließt, seine eigene Middleware zu schreiben, ist dies ein Codebeispiel für Djangos neue 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
5
masnun

Für Django Versionen> 1.10 kann laut Dokumentation eine benutzerdefinierte MIDDLEWARE als Funktion geschrieben werden, sagen wir in der Datei: yourproject/middleware.py (als Geschwister von 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

fügen Sie schließlich den python -Pfad dieser Funktion (mit dem Stammverzeichnis Ihres Projekts) zur MIDDLEWARE-Liste in settings.py Ihres Projekts hinzu:

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

Kinderleicht!

4
Dhruv Batheja

Nun, ich kenne Leute nicht, aber:

mit hier python 3.6 und Django 2.2

Das Umbenennen von MIDDLEWARE_CLASSES in MIDDLEWARE in settings.py hat funktioniert.

1
jnowak

Möglicherweise müssen Sie auch das Modell CorsModel Ihrer Datenbank hinzufügen. Ich habe Ausnahmen bekommen, als ich versuchte, es anders zu spülen.

python3 manage.py makemigrations corsheaders
python3 manage.py migrate
0
Rémi Héneault