Как включить CORS в Django REST Framework

Как включить CORS в моей платформе Django REST? ссылка не помогает, он говорит, что я могу сделать с помощью промежуточного программного обеспечения, но как я могу это сделать?

Ответы

Ответ 1

Ссылка, на которую вы указали в своем вопросе, рекомендует использовать django-cors-headers, чья документация говорит об установке библиотеки

pip install django-cors-headers

а затем добавьте его в установленные приложения:

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

Вам также нужно будет добавить класс промежуточного программного обеспечения для прослушивания ответов:

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

Вы также можете просмотреть раздел конфигурации своей документации, обращая особое внимание на различные настройки CORS_ORIGIN_.

Ответ 2

pip install django-cors-headers

а затем добавьте его в установленные приложения:

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

Вам также нужно добавить класс промежуточного программного обеспечения для прослушивания ответов:

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

CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = [
    'http://localhost:3030',
]
CORS_ORIGIN_REGEX_WHITELIST = [
    'http://localhost:3030',
]

подробнее: https://github.com/ottoyiu/django-cors-headers/#configuration

прочитав официальную документацию можно решить практически все проблемы

Ответ 3

Вы можете сделать это с помощью специального промежуточного программного обеспечения, хотя зная, что лучший вариант использует проверенный подход пакета django-cors-headers. С учетом сказанного, вот решение:

создать следующую структуру и файлы:

- 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

добавить в settings.py отмеченную строку:

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
)

Ответ 4

Если кто-то вернется к этому вопросу и решит написать свое собственное промежуточное ПО, это образец кода для промежуточного ПО нового стиля 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

Ответ 5

Для версий Django> 1.10, согласно документации, пользовательское ПО MIDDLEWARE может быть записано как функция, скажем, в файле: yourproject/middleware.py (как брат 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

и, наконец, добавьте путь Python этой функции (w.r.t. корень вашего проекта) в список MIDDLEWARE вашего проекта settings.py:

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

Легко, peasy!

Ответ 6

Ну, я не знаю, ребята, но:

используя здесь Python 3.6 и Django 2.2

Работает переименование MIDDLEWARE_CLASSES в MIDDLEWARE в settings.py.

Ответ 7

Вам также может потребоваться добавить модель CorsModel в вашу базу данных. Я получал исключения, пытаясь очистить его в противном случае.

python3 manage.py makemigrations corsheaders
python3 manage.py migrate

Ответ 8

Это можно сделать следующим образом.

n = 0

numbers = [0]

for i in range(0,11):
    print n,
    numbers.append(n)
    prev = numbers[-2]
    if n == 0:
        n = 1
    else:
        n = n + prev