⭐还有人不会用Django配置CORS?
⭐耗时3600秒整理的资料直接拿走!一篇文章彻底解决Django跨域问题!
⭐本文包含以下内容:Django解决跨域问题,Django解决跨域携带Cookie问题等
⭐官方文档:Django-cors-headers ·皮皮 (pypi.org) 最全面的配置推荐大家前往官网学习
项目主页:adamchainz/django-cors-headers:Django 应用程序,用于处理跨域资源共享 (CORS) 所需的服务器标头 (github.com)
pip install django-cors-headers
# 记得修改允许访问的IP
ALLOWED_HOSTS = ['*'] # 允许全部IP访问项目
# setting.py 修改以下内容
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders', # 注册app corsheaders
'app01',# 你的app
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware', # 加入中间键 位置必须在这里 不能在其他位置
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware', 如果你的项目没有考虑到 csrf 网络攻击,可注释掉,否则会报错没有传递 csrf cookie
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# 在 setting.py 末尾添加以下设置
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_ALL_ORIGINS = True
CORS_ALLOW_HEADERS = ('*')
# 允许所有 域名/IP 跨域
CORS_ALLOW_ALL_ORIGINS = True
# 配置可跨域访问的 域名/IP
CORS_ALLOWED_ORIGINS = [
'127.0.0.1:8000',
'localhost:8080',
'myname.com',
]
# 使用正则表达式匹配允许访问的 域名/IP
CORS_ALLOWED_ORIGIN_REGEXES = [
r"^https://\w+\.example\.com$",
]
# 配置允许的请求方式
CORS_ALLOW_METHODS = [
'*', # * 表示允许全部请求头
'GET',
'POST',
'PUT',
'PATCH',
'DELETE',
'OPTIONS'
]
CORS_ALLOW_HEADERS = [
"accept",
"accept-encoding",
"authorization",
"content-type",
"dnt",
"origin",
"user-agent",
"x-csrftoken",
"x-requested-with",
]
# 改为True即为可跨域设置Cookie
CORS_ALLOW_CREDENTIALS = True
# 这里有一个需要注意的点
# chrome升级到80版本之后,cookie的SameSite属性默认值由None变为Lax
# 也就是说允许同站点跨域 不同站点需要修改配置为 None(需要将Secure设置为True)
# 需要前端与后端部署在统一服务器下才可进行跨域cookie设置
# 总结:需要设置 samesite = none、secure = True(代表安全环境 需要 localhost 或 HTTPS)才可跨站点设置cookie
Cookie属性
key:键
value:值
max_age:多久后过期,时间为秒,默认为None,临时cookie设置即关闭浏览器就消失
expires:过期时间,具体时间
path:生效路径,默认‘/’
domain:生效的域名,你绑定的域名
secure:HTTPS传输时应设置为true,默认为false
httponly:值应用于http传输,这时JavaScript无法获取
SameSite属性详解
# 以下内容均在 setting.py 配置
# 将session属性设置为 secure
SESSION_COOKIE_SECURE = True
# 设置set_cookie的samesite属性
SESSION_COOKIE_SAMESITE = 'None'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SAMESITE = 'Strict'
# 配置Django项目中哪些URL使用CORS进行跨域
# 默认为 r'^.*$',即匹配所有 URL
# 以下案例为 /api/*** 均可进行跨域访问
CORS_URLS_REGEX = r"^/api/.*$"
如果对你有帮助请给我点个赞吧
❤关注我查看更多技术分享文章 Django+Vue 全栈