在 Django 中根据端点设置不同的 CORS 规则
Set up different CORS rules based on the endpoint in Django
我正在尝试找出一种方法,根据前端会命中的后端端点来设置不同的 CORS 规则。
所以我可以
/api 具有 CORS 域白名单的端点和
/public-api 没有 CORS 域白名单。
这是必需的,因为我有两个用于我自己的前端的内部端点,以及一个可以安装在任何第 3 方域中的 public JS 小部件。
我查看了 django-cors-headers
库,但它是正则表达式配置
CORS_ORIGIN_REGEX_WHITELIST = []
努力让来自域列表的请求通过。
就我而言,我需要一种方法来使用正则表达式(或其他方法)来让请求通过或不通过我的端点。
如果您可以将您的私人网址加入单独的前缀(例如:/private/<something>
),您可以使用 CORS_URLS_REGEX=r'^/private/.*$'
您可以在此处阅读更多相关信息:
https://github.com/adamchainz/django-cors-headers#cors_urls_regex
django-cors-headers 允许您指定一个自定义处理程序函数,该函数将检查请求是否应被允许。在你的情况下,你可以使用这样的东西:
# myapp/handlers.py
from corsheaders.signals import check_request_enabled
def cors_allow_particular_urls(sender, request, **kwargs):
return request.path.startswith('/public-api/')
check_request_enabled.connect(cors_allow_mysites)
handlers.py
需要在应用程序配置中加载:
# myapp/__init__.py
default_app_config = 'myapp.apps.MyAppConfig'
# myapp/apps.py
from django.apps import AppConfig
class MyAppConfig(AppConfig):
name = 'myapp'
def ready(self):
# Makes sure all signal handlers are connected
from myapp import handlers # noqa
更多信息在这里:https://github.com/adamchainz/django-cors-headers#signals
我正在尝试找出一种方法,根据前端会命中的后端端点来设置不同的 CORS 规则。
所以我可以
/api 具有 CORS 域白名单的端点和
/public-api 没有 CORS 域白名单。
这是必需的,因为我有两个用于我自己的前端的内部端点,以及一个可以安装在任何第 3 方域中的 public JS 小部件。
我查看了 django-cors-headers
库,但它是正则表达式配置
CORS_ORIGIN_REGEX_WHITELIST = []
努力让来自域列表的请求通过。
就我而言,我需要一种方法来使用正则表达式(或其他方法)来让请求通过或不通过我的端点。
如果您可以将您的私人网址加入单独的前缀(例如:/private/<something>
),您可以使用 CORS_URLS_REGEX=r'^/private/.*$'
您可以在此处阅读更多相关信息: https://github.com/adamchainz/django-cors-headers#cors_urls_regex
django-cors-headers 允许您指定一个自定义处理程序函数,该函数将检查请求是否应被允许。在你的情况下,你可以使用这样的东西:
# myapp/handlers.py
from corsheaders.signals import check_request_enabled
def cors_allow_particular_urls(sender, request, **kwargs):
return request.path.startswith('/public-api/')
check_request_enabled.connect(cors_allow_mysites)
handlers.py
需要在应用程序配置中加载:
# myapp/__init__.py
default_app_config = 'myapp.apps.MyAppConfig'
# myapp/apps.py
from django.apps import AppConfig
class MyAppConfig(AppConfig):
name = 'myapp'
def ready(self):
# Makes sure all signal handlers are connected
from myapp import handlers # noqa
更多信息在这里:https://github.com/adamchainz/django-cors-headers#signals