Django 解决CORS跨域问题的方法

时间:2024-10-26 14:14:41 类型:python
字号:    

解决思路

如何解决这种情形的问题呢?
浏览器同源策略有条规则,Response头部如果包含如下字段值,则不做CORS检查。

Access-Control-Allow-Origin: *

解决方法:通过 django-cors-headers 库来实现

1): 安装: 

pip install django-cors-headers

2) 修改 settings.py 配置文件

添加到应用列表

INSTALLED_APPS = (
    ##...
    'corsheaders'
)

corsheaders.middleware.CorsMiddleware

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    ......

然后,添加下面配置 允许所有 domain 访问

CORS_ORIGIN_ALLOW_ALL = True

或者,允许某些域访问

CORS_ORIGIN_ALLOW_ALL = False
# 允许域名加入白名单
CORS_ORIGIN_WHITELIST = (
    'http//:localhost:8000',
)

至此,Django端已经解决了跨域问题,如果有问题,一是注意步骤是否有遗漏, 二是注意 浏览器端是否有清缓存(个人在这里因为没有清缓存,花了很长时间,电脑重启了都没有起作用)

说明

在测试环境中,可以允许所有domain来访问,以避免 CORS问题,前后端分离项目在生产环境下,通常应该部署在同域下,
如果确实需要跨域,则将前端域名添加到白名单 CORS_ORIGIN_WHITELIST配置项中,禁止其它域访问


<