Django中的跨域解决办法 基于后端的跨域解决方案
何为跨域?
在浏览器中,只要发送请求的URL的协议、域名、端口号这三者中的任意一个与当前页面地址的协议、域名、端口号不同,则称之为跨域。当发生这种情况时,浏览器的同源策略会报异常并拒绝访问。而前后端分离的开发,前端和后端由不同的开发,所以前后端应用可能不会使用同一个协议、域名、端口号。那么这时候就需要在后端做一些配置,使URL能够跨域正常访问。
1 Django中的跨域解决办法
1.1 安装django-cors-headers
pip install django-cors-headers
1.2 设置全局配置文件
在项目全局配置文件settings.py
中,注册corsetheaders应用:
INSTALLED_APPS = [
...,
'corsheaders'
]
设置中间件MIDDLEWARE:
MIDDLEWARE = [
'coreheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
]
其中,coreheaders.middleware.CorsMiddleware,中间件需要放置在首位。
继续添加Cookie的配置项:
CORS_ALLOW_CREDENTIALS = True # 允许跨域时携带cookie
CORS_ORIGIN_ALLOW_ALL = True # 指定所有域名都可以访问后端接口
上述配置完成,从前端访问后端接口就不会有跨域提示了。
2 如果还是不行
如果还是不行,就在项目全局配置文件settings.py
中,设置跨域访问白名单,同时将允许跨域的请求方法以及请求头参数都放进去:
# ...
# 跨域访问白名单
CORS_ORIGIN_WHITELIST = (
'http://10.8.32.203',
'http://10.8.32.203:8003',
'http://10.8.32.203:8002',
'http://10.8.3.20',
'http://10.8.3.20:8003',
'http://10.8.3.20:8002',
)
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True # 允许跨域时携带cookie
# 允许跨域的请求方法
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
# 请求头中可携带的参数
CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
'Pragma',
'X-HTTP-Method-Override',
'Access-Control-Allow-Origin',
'Access-Control-Allow-Credentials',
'Access-Control-Allow-Methods',
'json',
'csrfmiddlewaretoken'
)