文章目录
Django+vue的CORS问题
当前端与后端分处不同的域名,因为客户端访问不同源的服务端时会遭到浏览器的同源策略的拦截,所以我们需要配置CORS,一般开发中配置CORS有2种方案:
- web客户端的vue项目中配置vue.config.js实现跨域(使用vite搭建的vue项目,则配置文件是vite.config.js)
- api服务端的django项目中配置cors实现跨域
两种方式中可以任选其一,一起配置会冲突。
配置前端的vue.config.js
export default defineConfig({
plugins: [
vue(),
AutoImport({
resolvers: [ElementPlusResolver()],
}),
Components({
resolvers: [ElementPlusResolver()],
}),
],
server: {
// 这行配置定义了开发服务器监听的端口号,当启动前端项目时,可以通过这个端口访问应用。默认情况下,许多前端项目(如Vue、React)使用3000端口,但这可以根据您的需要进行更改。
port: '3000',
// 这行配置定义了开发服务器监听的主机名。通常在本地开发时,我们使用localhost,但如果你想通过特定的域名来访问,可以在这里设置
host: 'www.local.cn',
proxy: { // 跨域代理
'/api': { // 凡是遇到 /api 路径的请求,都映射到 target 属性
// /api/header/ ---> http://api.luffycity.cn:8000/header/
target: 'http://api.luffycity.cn:8000/',
// target属性定义了实际的后端服务地址,所有匹配到'/api'路径的请求都会被转发到这个地址。例如,如果前端发送请求到 '/api/header/',那么代理会将请求转发到 'http://api.local.cn:8000/header/'。
changeOrigin: true, // 是否允许跨域
ws: true, // 是否支持websocket跨域
rewrite: path => path.replace(/^\/api/, '') // 正则路径替换
}
}
}
});
配置后端的settings.py
-
安装django-cors-headers
pip install django-cors-headers
-
配置settings.py
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'corsheaders', 'home', ] MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', # cors跨域的中间件 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
-
添加客户端访问服务端的白名单,设置允许哪些客户端客户端跨域访问服务端,
# CORS的配置信息: # 方案1: # CORS_ORIGIN_WHITELIST = ( # 'http://www.luffycity.cn:3000', # ) # CORS_ALLOW_CREDENTIALS = False # 不允许ajax跨域请求时携带cookie # 方案2: CORS_ALLOW_ALL_ORIGINS = True