【Django跨域】一篇文章彻底解决Django跨域问题!【转】
Django解决跨域
⭐还有人不会用Django配置CORS?
⭐耗时3600秒整理的资料直接拿走!一篇文章彻底解决Django跨域问题!
⭐本文包含以下内容:Django解决跨域问题,Django解决跨域携带Cookie问题等
⭐官方文档:Django-cors-headers ·皮皮 (pypi.org) 最全面的配置推荐大家前往官网学习
基本使用
1.安装依赖
项目主页:adamchainz/django-cors-headers:Django 应用程序,用于处理跨域资源共享 (CORS) 所需的服务器标头 (github.com)
pip install django-cors-headers
2.修改设置
- 修改Django项目文件夹下的 setting.py 文件
# 记得修改允许访问的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 = ('*')
- 配置完以上内容后Django就可用跨域访问啦!基本需求就已经解决啦!
- 配置内容详解请向下查看学习!
详细配置
- 以下内容均在 setting.py 中配置
- 下面是一些常用的 全面的需要大家去官方文档查阅
配置允许访问的域名白名单
# 允许所有 域名/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", ]
允许跨域访问Cookie
# 改为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属性详解
- Lax
- Cookies 允许与顶级导航一起发送,并将与第三方网站发起的 GET 请求一起发送。这是浏览器中的默认值。
- Strict
- Cookies 只会在第一方上下文中发送,不会与第三方网站发起的请求一起发送。
- None
- Cookie 将在所有上下文中发送,即允许跨站发送。
配置的介绍
- Django版本高于2.1:直接设置即可
- 如果DJango版本低于2.1:需要下载 django-cookie-samesite 再设置
- 其他详细Cookie配置内容请参考官方文档:配置 | Django 文档 | Django (djangoproject.com)
SameSite属性详解 Lax Cookies 允许与顶级导航一起发送,并将与第三方网站发起的 GET 请求一起发送。这是浏览器中的默认值。 Strict Cookies 只会在第一方上下文中发送,不会与第三方网站发起的请求一起发送。 None Cookie 将在所有上下文中发送,即允许跨站发送。 配置的介绍 Django版本高于2.1:直接设置即可 如果DJango版本低于2.1:需要下载 django-cookie-samesite 再设置 其他详细Cookie配置内容请参考官方文档:配置 | Django 文档 | Django (djangoproject.com)
配置使用CORS的URL
# 配置Django项目中哪些URL使用CORS进行跨域 # 默认为 r'^.*$',即匹配所有 URL # 以下案例为 /api/*** 均可进行跨域访问 CORS_URLS_REGEX = r"^/api/.*$"
本文来自博客园,作者:他还在坚持嘛,转载请注明原文链接:他还在坚持嘛 https://www.cnblogs.com/brf-test/p/17297581.html