Django ASGI Новая реликвия CORS Ошибка Heroku

Я использую приложение Django, использующее каналы Django и сервер daphne (ASGI) вместо обычного сервера gunicorn (WSGI). Поэтому мне пришлось изменить свое приложение к этому:

# asgi.py
import os
import django
from channels.routing import get_default_application
from asgiref.wsgi import WsgiToAsgi
from django.core.wsgi import get_wsgi_application
from newrelic import agent

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")
django.setup()

application = agent.WSGIApplicationWrapper(get_wsgi_application())

application = WsgiToAsgi(application)

К моему удивлению, это действительно работает. Когда я получаю доступ к своему django api из браузера или почтальона, он работает правильно, и данные отображаются в New Relic. Однако у меня также есть клиентское веб-приложение Angular, которое выполняет вызовы REST API к серверу django, и я получаю ошибки CORS.

Обратите внимание, что это не является обычной проблемой CORS, так как, когда я удаляю новую оболочку реликвии, я могу правильно получить доступ к своему API из Angular.

Ошибка загрузки https://my-app.herokuapp.com/api/: Ответ на запрос предварительной проверки не проходит проверку контроля доступа: На запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-Origin". происхождения https://frontend.com поэтому не разрешен доступ.

1 ответ

Измените свой файл asgi.py примерно так

      from django.core.asgi import get_asgi_application
import newrelic.agent #import newrelic agent

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")
django_asgi_app = get_asgi_application()
from django.conf import settings
newrelic_config_file = settings.BASE_DIR + "/newrelic.ini" #location of your newrelic.ini file
newrelic.agent.initialize(newrelic_config_file) #initialise agent
application = newrelic.agent.ASGIApplicationWrapper(django_asgi_app) 
Другие вопросы по тегам