vue.js与django-rest-framework进行数据的交互及Ajax和axios异步请求django后端API接口
1. vue的引用源<script src="https://cdn.jsdelivr.net/npm/vue"></script>2.django 和vue语法冲突处理需要增加一个标签{% verbatim %}<body>{% verbatim %}<div id="app">{{ text }} <br><br><
1. vue的引用源
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
2. django 和vue语法冲突处理需要增加一个标签{% verbatim %}
<body>
{% verbatim %}
<div id="app">
{{ text }} <br><br>
<button v-on:click="create_server">插入一台服务器</button>
</div>
{% endverbatim %}
</body>
3. django的数据传递给vue
python中的列表或字典可以直接转换成json数据,然后在传递给vue即可
(1)django服务器端代码:
def index(request):
list = [11, 22, 33]
dict = {"name": "mayanan", "age": 29}
json_info = {
"list": json.dumps(list),
"dict": json.dumps(dict)
}
return render(request, "assets/index.html", json_info)
(2)vue前端代码
<script>
var list = {{ list | safe }}
var obj = {{ obj | safe }}
console.log(list,obj)
</script>
4. vue的数据传递给django,ajax方法
(1)get请求,获取数据
使用全局对象方式 Vue.http 或者在一个 Vue 实例的内部使用 this.$http来发起 HTTP 请求
Vue 要实现异步加载需要使用到 vue-resource 库
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js"></script>
vue代码方法1:
<script>
Vue.http.get("/assets/servers/?page=8").
then(function (response) {
console.log(response.data);
})
</script>
vue代码方法2:
<script>
var vue = new Vue({
el: "#app",
data: {
text: "",
},
mounted: function () {
this.$http.get("/assets/servers/?page=8").then(function (response) {
console.log(response.data);
});
}
})
</script>
因为我们的django后台已经通过django-rest-framework实现了该接口,所以console打印结果如下:
(2)post请求,新增数据
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js"></script>
<script src="https://cdn.bootcss.com/qs/6.5.1/qs.min.js"></script>
<script>
var vue = new Vue({
el: "#app",
data: {
text: "",
},
mounted: function () {
this.$http.post("/assets/servers/?page=8", {"server_name": "联想服务器", "status": "offline"}).
then(function (response) {
console.log(response.data);
});
}
})
</script>
效果如图:
注意:因为我们后台写的是restfulAPI接口,所以post请求没有csrf_token的问题,所以也post请求cookie也不需要携带csrftoken。
5. vue的数据传递给django,axios方法
(1)get请求,获取数据
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
axios.get("/assets/servers/?page=8").then(function (response) {
console.log(response.data);
});
</script>
(2)post请求,新增数据
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
axios.post("/assets/servers/?page=8", {"server_name": "惠普服务器", "status": "normal"}).then(function (response) {
console.log(response.data);
});
</script>
注意:因为我们后台写的是restfulAPI接口,所以post请求没有csrf_token的问题,所以也post请求cookie也不需要携带csrftoken。
至于其它针对详情页的方法如:get、put、delete,只需要改写axios.后面的方法名即可实现,例如:删除id=18的记录,方法改成delete即可,字典中的参数可以删掉,
但是如果是put更新方法,必须加字典中的参数。
<script>
axios.delete("/assets/servers/18/", {"id": 18, "server_name": "惠普服务器18", "status": "abnormal"}).then(function (response) {
console.log(response.data);
});
</script>
6. Ajax 与 axios的区别
(1)Ajax
即“Asynchronous Javascript And XML”,是指一种创建交互式网页应用的网页开发技术
- Ajax = 异步 JavaScript 和 XML(标准通用标记语言的子集)
- Ajax是一种用于创建快速动态网页的技术
- Ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术
- 通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新
- 传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面
(2)axios
用于浏览器和node.js的基于Promise的HTTP客户端
- 从浏览器制作XMLHttpRequests
- 让HTTP从node.js的请求
- 支持Promise API
- 拦截请求和响应
- 转换请求和响应数据
- 取消请求
- 自动转换为JSON数据
- 客户端支持防止XSRF
更多推荐
所有评论(0)