CORS + Django 跨域配置

之前学的跨域,最近访问页面总是时有时无的,今天下定决心好好研究。

如需转载,标记出处

关于 CORS(跨域资源共享) ,官方推荐使用第三方库是 django-cors-headers( Django 跨域问题的标准工具)

一、教程

  1. 安装 django-cors-headers

pip install django-cors-headers

  1. 添加到 Django 项目中的 INSTALLED_APPS

INSTALLED_APPS = [

...

'corsheaders',

...

]

  1. 添加到 MIDDLEWARE(必须放在较前位置,建议第一个)

MIDDLEWARE = [

'corsheaders.middleware.CorsMiddleware',

'django.middleware.common.CommonMiddleware', # 确保也有CommonMiddleware

...

]

  1. 配置允许跨域的域名

只允许特定域,这里就是你的前端url,ip地址也要带上,

CORS_ALLOWED_ORIGINS = [

"http://example.com:8080", # 你的正式域名

]

要是有具体的域名,需要配置hosts文件(参照中间的meiduo.site那一行)

5.指定哪些主机名(域名或 IP 地址)允许访问你的 Django 网站

ALLOWED_HOSTS 是 Django 的访问白名单,只有写进去的域名或 IP 才能访问,否则拒绝访问。

ALLOWED_HOSTS = ['www.meiduo.site','127.0.0.1']

6.进阶配置(根据需要选择,可以不看)

1). 允许发送认证信息(如 cookie、凭证等)

CORS_ALLOW_CREDENTIALS = True

2). 允许特定的 HTTP 方法

CORS_ALLOW_METHODS = [

"DELETE",

"GET",

"OPTIONS",

"PATCH",

"POST",

"PUT",

]

二、我自己的配置如下:

前端www.meiduo.siteL:8080

后端是8000

python 复制代码
ALLOWED_HOSTS = ['www.meiduo.site','127.0.0.1']

# Application definition

INSTALLED_APPS = [
    'corsheaders',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'apps.users',
    'apps.verifications'

]
#跨域添加白名单

CORS_ALLOWED_ORIGINS = [
    'http://127.0.0.1:8080',
    'http://localhost:8080',
    'http://www.meiduo.site:8080',
]
CORS_ALLOW_CREDENTIALS = True  # 允许携带cookie
CORS_ALLOW_METHODS = [
    "GET",
    "POST"
]
MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

三、运行

我的前后端目录放在同一个文件夹中

进入前端目录里,开个终端

python3 -m http.server 8080

再启动django

访问​​​​​​​http://www.meiduo.site:8080/index.html

搞定

问题集:

1.ALLOWED_HOSTS和CORS_ALLOWED_ORIGINS 两者有什么区别?

|----------------------|-----------------------------|-------------------------------------------|
| 配置 | 作用 | 针对的对象 |
| ALLOWED_HOSTS | 谁能访问 Django 服务器 | 浏览器发出的所有请求 举例:http://www.meiduo.site |
| CORS_ALLOWED_ORIGINS | 允许哪些前端域名跨域调用 Django API | 前端网页的 跨域请求 举例:http://www.meiduo.site:8080 |

跨域(CORS, Cross-Origin Resource Sharing)指的是:

浏览器限制,当前网页的 JavaScript 只能访问 "同源" 的资源。

只要「协议、域名、端口」有任何一个不同,都算不同源(跨域)

端口不同,哪怕 IP 和协议都相同,也算跨域。浏览器默认 不允许 JS 跨域请求接口,所以需要通过 CORS 告诉 Django:我允许 8080(前端的) 来调用我 8000 (后端的)接口

相关推荐
千层冷面1 天前
Flask ORM 查询详解:Model.query vs db.session.query vs db.session.execute
数据库·python·django·flask
王小王-1232 天前
基于Django的福建省旅游数据分析与可视化系统【城市可换】
数据分析·django·旅游·携程·福建省旅游可视化·旅游数据分析系统·景区数据分析
合作小小程序员小小店2 天前
web网站开发,在线%射击比赛成绩管理%系统开发demo,基于html,css,jquery,python,django,model,orm,mysql数据库
python·mysql·django·jquery·html5
Q_Q19632884752 天前
python基于Hadoop的超市数据分析系统
开发语言·hadoop·spring boot·python·django·flask·node.js
Q_Q5110082852 天前
python的滑雪场雪具租赁服务数据可视化分析系统
spring boot·python·信息可视化·django·flask·node.js·php
noravinsc3 天前
django 如何读取项目根目录下的文件内容
后端·python·django
合作小小程序员小小店3 天前
web安全开发,在线%射击比赛管理%系统开发demo,基于html,css,jquery,python,django,三层mysql数据库
css·mysql·django·html·jquery
桃源学社(接毕设)4 天前
基于Django珠宝购物系统设计与实现(LW+源码+讲解+部署)
人工智能·后端·python·django·毕业设计
alexander0684 天前
Django路由学习笔记
笔记·学习·django
木有童年5 天前
Django配置sqllite之外的数据库
django