Как включить 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