Comment puis-je activer CORS sur Django REST Framework

comment activer CORS sur mon cadre REST de Django? référence ne l'aide pas beaucoup, il dit que je peux le faire par un middleware, mais comment puis-je le faire?

27
demandé sur Julio Marins 2016-03-03 03:32:00

5 réponses

le lien auquel vous avez fait référence dans votre question recommande d'utiliser django-cors-headers dont documentation dit à installer la bibliothèque

pip install django-cors-headers

puis l'ajouter à vos applications installées:

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

vous aurez aussi besoin d'ajouter une classe middleware pour écouter les réponses:

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

Vous pouvez aussi parcourir la section de configuration de sa documentation.

44
répondu Chris 2018-07-08 18:47:55
pip install django-cors-headers

puis l'ajouter à vos applications installées:

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

vous devrez aussi ajouter une classe middleware pour écouter les réponses:

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

plus de détails: https://github.com/ottoyiu/django-cors-headers/#configuration

lire la documentation officielle peut résoudre presque tous les problème

10
répondu likaiguo.happy 2016-09-09 06:59:44

vous pouvez le faire en utilisant un middleware personnalisé, Même si savoir que la meilleure option est d'utiliser l'approche Testée du paquet django-cors-headers. Avec cela dit, voici la solution:

créer la structure et les fichiers:

-- 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

ajouter settings.py la ligne:

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
répondu Julio Marins 2017-03-05 18:04:05

Dans le cas où quelqu'un est de revenir à cette question et de décider d'écrire leur propre middleware, c'est un exemple de code pour Django style nouveau 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
répondu masnun 2017-03-03 17:18:53

Vous pouvez également ajouter le CorsModel modèle à votre base de données. J'ai eu des exceptions tout en essayant de tirer la chasse.

python3 manage.py makemigrations corsheaders
python3 manage.py migrate
0
répondu Rémi Héneault 2018-09-25 12:25:30