Заголовки Django cors не работают с каналами django
У меня есть проект на django, и когда я добавил каналы django, мои корсы перестали работать корректно
# settings.py
...
...
...
DEBUG = True
ALLOWED_HOSTS = ['localhost']
CORS_ALLOWED_ORIGINS = [
"http://localhost:3000",
]
CSRF_TRUSTED_ORIGINS =[
"http://localhost:3000",
]
CORS_ALLOW_CREDENTIALS = True
INSTALLED_APPS = [
'corsheaders',
...
'channels',
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
...
]
...
...
...
...
WSGI_APPLICATION = 'config.wsgi.application'
ASGI_APPLICATION = 'config.asgi.application'
# asgi.py
from channels.routing import ProtocolTypeRouter, URLRouter
from django.urls import path
from django.core.asgi import get_asgi_application
websocket_urlpatterns = [
]
application = ProtocolTypeRouter({
'http': get_asgi_application(),
'websocket': URLRouter(
websocket_urlpatterns
),
})
Ошибка в браузере:
Access to XMLHttpRequest at 'http://localhost:8000/' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
А когда я удаляю ASGI_APPLICATION из файла настроек и каналы из списка APPS, то cors работает.
Почему?
Вот мои версии:
channels==3.0.4
Django==4.0.0
django-cors-headers==4.0.0
Я попытался добавить свое собственное промежуточное ПО в начало списка
def open_access_middleware(get_response):
def middleware(request):
response = get_response(request)
print('Test')
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Headers"] = "*"
return response
return middleware
но он все еще не работает.
Вашему settings.py
не хватает конфигурации для Access-Control-Allow-Origin
.
Вы можете добавить его с помощью следующего кода:
CORS_ALLOW_ALL_ORIGINS = True
Вам также может понадобиться следующая настройка:
CORS_ORIGIN_ALLOW_ALL = True