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客户端

  1. 从浏览器制作XMLHttpRequests
  2. 让HTTP从node.js的请求
  3. 支持Promise API
  4. 拦截请求和响应
  5. 转换请求和响应数据
  6. 取消请求
  7. 自动转换为JSON数据
  8. 客户端支持防止XSRF

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐