最近用Django做后端服务器,Vue做前端,遇到了一个跨域问题,在此纪录一下:
前端:
封装了一下Axios:
request.js如下:
// 加载进度条
//导入
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import axios from "axios";
//请求相关的方法
// 初始化axios对象
var instance = axios.create({
headers:{
"Access-Control-Allow-Origin":"*",
"accept":"*/*"
},
// 接口根路径
baseURL: '/api',
// 超时时间
timeout:50000,
// headers: {'X-Requested-With': 'XMLHttpRequest'},
});
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
// 在发送请求之前做些什么
NProgress.start()
return config;
}, function (error) {
// 对请求错误做些什么
NProgress.done()
return Promise.reject(error);
});
// 添加响应拦截器
instance.interceptors.response.use(function (response) {
// 对响应数据做点什么
NProgress.done()
return response;
}, function (error) {
// 对响应错误做点什么
NProgress.done()
return Promise.reject(error);
});
// 自定义get方法
let get = async function (url,params) {
let {data} = await instance.get(url,{params})
return data
}
// 自定义post方法
let post = async function (url,params) {
let {data} = await instance.post(url,params)
return data
}
//导出
export {
get,
post
}
在vue.config.js中做代理配置:
var path = require('path');
// 全局配置文件
module.exports = {
// 关闭语法检查
lintOnSave:false,
// 开发服务器相关配置,若使用node.js此项配置被忽略
devServer: {
host:'localhost',
//配置后端接口
proxy: {
'/api': {
target: ' http://127.0.0.1:8000',//后端接口地址 特别注意:target只写地址就好比如对 http://127.0.0.1:8848/api/users 的请求会将请求代理到 http://localhost:8000/api/users。
changeOrigin: true, //是否跨域
port: 8000
}
},
contentBase: path.join(__dirname, 'public'),
port: 8848,
},
// 配置webpack相关
configureWebpack:{
//解析
resolve:{
//路径别名
alias: {
'@': path.resolve(__dirname,'src/'),
'@v': path.resolve(__dirname, 'src/views/'),
'@c': path.resolve(__dirname, 'src/components/'),
}
}
}
}
发送请求的位置代码如下:
handleLogin(){
this.$get('/index').then(response=>{
console.log(response.data)
}).catch(err=>{
console.log(err)
})
后端Django的项目中,
setting.py中做一下相关配置如下:
# 允许所有ip访问
LLOWED_HOSTS = ['*']
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
# 允许所有的请求头
CORS_ALLOW_HEADERS = ('*')