当我运行Django CORS框架时,没有任何东西被过滤掉。当我向处理程序插入打印语句时,该值被评估为false,但它不会过滤掉对视图端点的请求。我需要对视图进行任何更改吗?我是否错过了一些会使它拒绝不符合cors_allow_mysites
标准的请求的东西?
handlers.py
from corsheaders.signals import check_request_enabled
def cors_allow_mysites(sender, request, **kwargs):
return ("Origin" in request.headers) and (request.headers["Origin"] == 'url.com')
check_request_enabled.connect(cors_allow_mysites)
apps.py
from django.apps import AppConfig
class ApiEndpointConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'api_endpoint'
def ready(self):
# Makes sure all signal handlers are connected
from . import handlers # noqa
__init__.py
default_app_config = "api_endpoint.apps.ApiEndpointConfig"
check_request_enabled
信号的作用是确定是否将CORS标头(如"Access-Control-Allow-Origin")添加到响应中,它不会"过滤掉请求"。
当您的cors_allow_mysites
函数返回True
时,您应该期望看到"Access-Control-Allow-Origin"和响应中的其他CORS头,如果它返回False
,您应该这样做。
关于请求是否被过滤,这完全取决于这些头是否需要。如果您在"http://example.com"上,并且您正在从"http://example.com"获取数据,则不需要CORS标头,因此没有标头,请求将顺利通过。只有跨域请求才需要这些头文件。