vue前后端分离
axios前后端交互
安装
一定要安装到`项目目录下
cnpm install axios
配置
在main.js中配置
//配置axios
import axios from 'axios'
Vue.prototype.$axios = axios;
在组件中发送ajax请求
created(){
//发送axios请求
this.$axios({
url:this.$settings.base_url+'/cars/',
method:'get',
params:{
}
}).then(response => { //请求成功成功之后执行
this.cars = response.data;
}).catch(error => { //当网络状态码为4xx,5xx时执行
console.log(error.response)
});
},
错误信息都在error.response中
params:{}url拼接参数:任何请求都可以携带
data:{}数据包参数 get请求无法携带data参数
CORS跨域问题(同源策略)
django默认只对同源做响应(同源策略),存在跨域问题.
同源
http协议相同,ip服务器地址相同,app应用端口相同,三个都相同才叫同源.
跨域
http,ip,post三个有一个不同,就是跨域.
解决跨域问题
1)Django按照cors模块:
>: pip install django-cors-headers
2)在settings注册模块,配置中间件:
INSTALLED_APPS = [
...
'corsheaders'
]
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware'
]
3)在settings开启允许跨越:
CORS_ORIGIN_ALLOW_ALL = True
js全局配置
assets的js文件下设置settings全局js文件
export default{
base_url:'http://127.0.0.1:8000'
}
mian.js中配置全局js
//配置全局js
import settings from '@/assets/js/settings'
Vue.prototype.$settings = settings;
然后就可以在全局使用
this.$axios({
url:this.$settings.base_url + `/car/${pk}/`
}).then(response =>{
this.car = response.data
}).catch(error =>{
console.log(error.response)
})