首页 > 解决方案 > 在 Django 中根据端点设置不同的 CORS 规则

问题描述

我试图找出一种方法来根据后端端点前端会命中不同的 CORS 规则。

所以我可以拥有

具有 CORS 域白名单的 /api 端点和

/public-api 没有 CORS 域白名单。

这是必需的,因为我有两个用于我自己的前端的内部端点,以及一个可以安装在任何第 3 方域中的公共 JS 小部件。

我看过django-cors-headers图书馆,但它是正则表达式配置

CORS_ORIGIN_REGEX_WHITELIST = []

可以让来自域列表的请求通过。

就我而言,我需要一种方法来使用正则表达式(或其他方法)来让对我的端点的请求通过或不通过。

标签: djangocorsdjango-cors-headers

解决方案


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


推荐阅读