解决思路
如何解决这种情形的问题呢?
浏览器同源策略有条规则,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
配置项中,禁止其它域访问。