vue---day01与day02(vue介绍,插值语法,文本指令,属性指令,事件指令,对象的写法,class和style 属性指令,条件渲染指令,列表渲染指令)

上节回顾

# 1 jwt 源码分析
	-签发:
    	登录----》ObtainJSONWebToken--->post--->serializer.is_valid()--->走了校验---》正常登录逻辑可以拿到序列化类的validate中写---》authenticate(username=xx,password=xx)--->通过user获得payload----》通过payload---》token---》返回给前端
    -认证:
    	认证类---》BaseJSONWebTokenAuthentication(父类)---》authenticate
        
        
        
# 2 自定义表
	-签发:登录接口
    -认证:认证类
    
    
# 3 权限:acl  rbac
	-访问控制列表
    -基于角色的访问控制
    
# 4 django的auth+admin

# 5 simplieui

今日内容

1 drf回顾

# 1 drf 入门规范
	-前后端分离模式
    -前后端混合
    -postman
    -restful规范
    -drf:django的app
# 2 序列化类(重点)
	-Serializer
    	-字段类
        -字段参数
        -局部钩子
        -全局钩子
        -定制返回格式
        	-1 序列化类中写:SerializerMethtoField
            -2 在表模型中写
        -many=True    
    -ModelSerializer:create,update
        -class Meta:
            -model
            -fields
            -extra_kwargs
            
       	-重写字段  
    -反序列化校验源码----》forms
    
# 3 请求和相应
	-请求类源码:新的request
    -请求能解析的编码格式
    -相应对象源码:data,headers,status
    -响应格式
    
    
# 4 视图组件(重要)
	-两个试图基类
    -5个视图扩展类
    -9 视图类
    -视图集
# 5 路由写法
	-ViewSetMixin
    -映射写法
    -自动生成写法
    -action装饰器
    
# 6 认证频率权限(重点)
# 7 过滤,排序分页
	-过滤:内置,第三方,自定义
    -排序:内置
    -分页:三个分页类
    
# 8 全局异常

# 9 接口文档
	
# 10 jwt(重点)
	-base64
    -jwt原理
    -django中快速使用
    -自定义签发认证
    
    
# 11 rbac权限控制
# 12 simpleui使用

.
.
.
.

2 前端发展历史

# 1 HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面 ->
# 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 ->
# 后端渲染完数据 -> 返回数据给前端 -> 在浏览器中查看
	-ECMAScript 6 ECMAScript 6(简称ES6)是于20156月正式发布的JavaScript语言的标准
	-ES13--->标准
    -js=ecma+bom+dom
    -sass,typescript。。。
# 2 Ajax(异步JavaScript和XML)的出现 -> 后台发送异步请求,Render+Ajax混合
	-$.ajax
    -XMLHttpRequest  原生ajax


# 3 单用Ajax(加载数据,DOM渲染页面):前后端分离的雏形

# 4 Angular框架的出现(1个JS框架):出现了“前端工程化”的概念(前端也是1个工程、1个项目)


# 5 React、Vue框架:当下最火的2个前端框架(Vue:国人喜欢用,React:外国人喜欢用)

# 6 移动开发(Android+IOS) + Web(Web+微信小程序+支付宝小程序) + 桌面开发(Windows桌面):前端 -> 大前端

# 7 一套代码在各个平台运行(大前端):谷歌Flutter(Dart语言:和Java很像)可以运行在IOS、Android、PC端
	-前端用flutter后端用python写好不好

--------------------------
# 8 在Vue框架的基础性上 uni-app:一套编码 编到10个平台

uni-app是一个使用 Vue.js 开发所有前端应用的框架
开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。

也就是只要学会vue,在uni-app的平台上,开发出一套前端代码来,
就可以编译到各个平台上
--------------------------
# 9 在不久的将来 ,前端框架可能会一统天下

.
.
.
.
.

3 vue介绍

vue官网:  https://cn.vuejs.org/
看vue2的文档---起步按钮里有一些简单介绍

# Vue 是一套用于构建用户界面的渐进式框架
# Vue  js的框架

# M-V-VM 架构思想        MVC    MTV   MVVC   MVP移动端架构
	-M:Model 数据层   js的数据
    -V:View  视图层   html,css
    -VM:ViewModel vue做出来的介于数据层和视图层之间的一层,以后不需要手动进行dom操作了


----作用:以后页面变,js变量就变,js变量变,页面就变
-----------------------
 # 组件化开发、单页面开发
	-组件化开发,以后都是写出一个个组件,组件的组合成页面
    -单页面开发(单页面应用):spa:single-page application,一个HTML页面


 # 版本
    1.X:使用得较少
    2.X:普遍使用(蛮多)
    3.X:出了很久了,公司里新项目会选择
    	-语法有差距,但是vue3完全兼容vue2
        -你可以在vue3上写vue2,但是官方不建议了


# 先基于vue2讲

.
.
.

4 第一个helloworld

引入方式
CDN的方式引入
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>


下载后导入
其实就是直接在浏览器上打开  这是2.7.14版本的链接
https://cdn.jsdelivr.net/npm/vue/dist/vue.js  然后复制下来,
创个vue的js文件,把代码粘贴进去,再创建一个js文件夹,
把vue文件拖进去就行了
<script src="js/vue.js"></script>


补充
解释型的语言是需要解释器的

js就是一门解释型语言,只不过js解释器被集成到了浏览器中

所以,在浏览器的Console中输入命令,就和cmd中输入python后,进入交互式环境一样

解释器里面下个Vue.js 的插件,重启一下,会有自动提示

image
.
.

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">

    <p>{{ name }}</p>

</div>

<script>
    let vm = new Vue({
        el:'#app',  //  vue管理了查找到的div标签,在div里面就可以写vue的语法了
        data:{
            name:'hello world',
            age: 19
        }
    })

</script>

</body>
</html>

注意vue的文件没放在静态文件目录static下,所以只能将html页面直接用浏览器打开!
.
.
.
.

昨日回顾

# 1 put,post 提交的json格式必须是标准json字符串格式
# 2 字符串中不小心加了空格
# 4 认证类,当前登录用户可以不去数据库查出来
# 5 斜杠问题(中间件:django.middleware.common.CommonMiddleware)
	-delete----》301---》get 
    -books/1
    
    
    
    
# 1 drf大回顾
	-序列化类
    -视图类
    -三大认证
    -过滤排序
    -全局异常
    
    
# 2 前端发展历史
	-html5 css3 javascript----》ecma+bom+dom
    	-es5
        -es6  ``  箭头函数,导入导出语法。。。
        -es13
   -ajax
   -没有前端框架:纯ajax+页面    不需要后端渲染
   -vue,react(主流)
   -大前端---》flutter(Dart语言)
   -uni-app:vue语法写小程序,android,ios
    
# 3 vue
	-版本:2   3    3完全兼容2,3不推荐用2的语法写
    -vue 读音
    -MVVM架构
    	-M:model 数据层   js
        -V:view 视图层    html,css
        -VM:view model层,vue加入的一层
        
   -组件化开发 ,单页面开发(spa)


# 4 第一个vue---》渐进式框架
	-把vue2源码,下载到本地----》js代码
    -html中引入,写vue语法
    -new Vue({
        el:'#app',
        data:{
            name:'lqz'
        }
    })  实例

.
.
.
.

今日内容 day02

1 插值语法

1.1 mvvm演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>

<div id="app">
    姓名:{{name}}
    <br>
    <input type="text" v-model="name">

</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {  // data中定义的变量,以后直接从vm实例直接可以拿到
            name: 'lqz',
            age: 19
        }
    })
</script>
</html>

# 注意有时候bootstrap的js的cdn可能会和vue冲突,要注掉bootstrap的cdn

image
.
变量变,页面就变 页面变,变量就变
数据的双向绑定!!!
image
.
在data里面定义的变量,vue帮我们处理了,可以直接用对象直接点出来,
不用再用对象点_data再点变量了!!!
image
.
image
.
.
.
.

1.1 插值语法

# 插值语法的意思就是:被Vue管理的标签中,写个{{}}
# {{}}里面放变量等情况就叫插值语法

# 插值语法中可以放
	变量,对象取值,数组取值
	简单的js语法
	函数()

# 插值不能写在标签的属性上,只能写在标签内部!!!

.
.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>

<div id="app">
    <p>名字:{{name}}</p>
    <p>年龄:{{age}}</p>
    <p>爱好:{{hobby}}----->第一个爱好:{{hobby[1]}}</p>
    <p>妻子:{{wife}}----》妻子的年龄:{{wife.age}}---{{wife['age']}}</p>
    <p>运算:{{10*2+3*4}}</p>
    <p>三目运算符【条件?'符合了':'不符合了'】:{{10>90?'大于':'小于'}}</p>
    <p>标签(默认不会渲染成标签,如果能渲染成标签就有漏洞了,会有xss的风险):{{a_url}}</p>
    <p>函数()</p>

</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            name: 'lqz',
            age: 19,
            hobby: ['篮球', '足球', '乒乓球'],
            wife: {name: '刘亦菲', age: 38},
            // 运算
            a_url: '<a href="http://www.baidu.com">点我看美女</a>'
            // 三目运算符         三元表达式
        }
    })
</script>
</html>

----------------------------
补充插值语法只能用在标签的内部,不能用在标签头的属性里面
<p>名字:{{name}}</p>   # 能这样用
<p {{name}}></p>      # 不能这样用

csrf 跨站请求伪造 Cross-site request forgery
xss 跨站脚本攻击 Cross Site Scripting

.
.
.
.

2 文本指令

文本指令作用:
控制文本的显示与不显示,渲染成标签,还是渲染成字符串等

v-xx='' 可以写在任意标签的属性上

# 指令系统:vue提供的 都是v-xx  写在标签属性上的,统称为指令
--------------------------------------

# 例如  <p v-text="a_url"></p>
# a_url必须是data中定义的变量
--------------------------------------

# 1  v-text直接把字符串内容渲染在标签内部
	<p v-text="a_url"></p>

等同于   <p>{{a_url}}</p>

--------------------------------------

# 2  v-html 把字符串的内容渲染成标签,写在标签内部
	<p v-html="a_url"></p>

为什么同样是一串字符串,用了v-text就还是字符串,原因是v-text指令里面有自动将标签的 < >
转化为转义字符串了,所以就没有被识别成标签了!
--------------------------------------

# 3  v-show  等于布尔值,该标签是否显示   样式控制显示不显示:style="display: none;"

# 4  v-if    等于布尔值,该标签是否显示   整个标签之间删除,效率低,在dom中删除标签

--------------------------------------

.
.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>

<div id="app">

    <h2>v-text</h2>
    <p v-text="a_url"></p>
    <h2>v-html</h2>
    <p v-html="a_url"></p>
    <h2>v-show</h2>
    <img src="https://img2.woyaogexing.com/2023/02/10/f426aeefcf78b0f6e88bba4e67437409.jpeg" alt="" v-show="show" width="200px" height="200px">
    <h2>v-if</h2>
    <div v-if="show_if">
        <img src="https://img2.woyaogexing.com/2023/02/13/0253c158c222e0db0ea0bf68df21d315.jpeg" alt=""  width="200px" height="200px">
    </div>

</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            a_url: '<a href="http://www.baidu.com">点我看美女</a>',
            show: true,
            show_if:true
        }
    })
</script>
</html>

v-text直接把字符串内容渲染在标签内部,
image
.
.
v-html 把字符串的内容渲染成标签,写在标签内部
image
.
一个渲染成字符串,一个渲染成标签了
image
.
.
v-show指令 虽然我们在console里面通过vm.show=false 来控制该标签是否显示
实际上样式控制显示不显示是靠的:style="display: none;"
image
image
image
.
.
v-if指令 虽然我们在console里面通过vm.show_if=false 来控制该标签是否显示
实际上样式控制显示不显示是靠的:将v-if=false所在的标签整体删除与新增实现的
效率低,在dom中删除新增标签的
image
image
.
.
.
.
.

3 属性指令

# 属性指令的作用:控制标签的属性
# 标签上的属性可以绑定变量,以后变量变化,标签属性的值跟着变化
-href
-src
-name
-class
-style
-height
。。。
# 注意属性指令指的是所有属性,都可以通过属性指令绑一个变量!!!
------------------------------
# 语法
	v-bind:属性名="变量名"

# 可以简写成,以后都用简写
	:属性名="变量名"

-------------------------------

v-bind:属性名="变量名" 通过属性指令,将a标签的href属性的值,改成了变量名
这样我们在console里面通过vm.url="新的网址",这样当再点击a标签的时候
就往新的网站上跳转了!!!
image
.
.
同理我们也可以再console里面通过vm.h='2000px' 就改掉了图片的高度了
image

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>

<body>

<div id="app">

<!--  <a v-bind:href= "url" >点我看美女</a>-->
  <a :href= "url" >点我看美女</a>
  <br>
<!--  <img v-bind:src="photo" alt="" v-bind:height="h" v-bind:width="w">-->

  <img :src="photo" alt="" :height="h" :width="w">
</div>


<script>
    let vm = new Vue({
        el: '#app',
        data: {
          url:"http://www.baidu.com",
          photo:"https://img.lesmao.vip/k/1178/T/XIAOYU/951/951_001_dj7_3600_5400.jpg",
          h:'200px',
          w:'200px'
        }
    })
</script>
</body>
</html>

.
.
.
.
.

4 事件指令

# 事件是可以绑定给任意标签的,不单单是button标签!!!

# 事件指令是:点击事件,双击事件,滑动事件。。。。。用的最多的是点击事件click
# v-on:事件名='函数'
# 函数必须写在methods的配置项中
# -点击button就会触发绑定函数(handleClick)的执行
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>

<body>

<div id="app">
    <button v-on:click="handleClick">点我看美女</button>
    <div v-show="show">
        <img src="https://img.lesmao.vip/k/1178/T/XIAOYU/951/951_001_dj7_3600_5400.jpg" alt="" height="200px" width="200px">
    </div>
</div>

<script>
    let vm = new Vue({
        el: '#app',
        data: { show: false,},
        methods: {
            'handleClick': function () {
                this.show=!this.show  // this就是vm对象,!是取反操作
                                        }
                  }
    })
</script>
</body>
</html>
-----------------------------------------
# v-on:可以简写成@     以后都用简写成      @事件名='函数'
比如  @click="handleClick"

-----------------------------------------


-1 methods配置项中写成
	handleClick() {}    这种形式  es6的对象写法
	如果函数中再套函数,如何内部不是箭头函数,this指向有问题,需要在外部定义一下
	var _this = this
-----------------------------------------

.
.
.

小案例:点击一次按钮,随机切换一张美女图片

js 生成随机数  Math.random() 生成 [ 0, 1 ) 范围内的随机数
想生成比如[ 0, 5 )随机数  就要这样写Math.random()*5
想生成[ 10, 16 )随机数  就要这样写Math.random()*6+10
想生成[ 10, 16 )随机整数  就要这样写Math.round(Math.random()*6+10)
这个Math.round就是将随机数四舍五入取整

---------------------
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>

<body>

<div id="app">
    <button @click="handleClick">点我看美女</button>
    <div>
        <img :src="url" alt="" height="600px" width="600px">
    </div>

</div>


<script>
    let vm = new Vue({
        el: '#app',
        data: {
            url: "https://img2.woyaogexing.com/2023/02/13/0253c158c222e0db0ea0bf68df21d315.jpeg",
            url_list: [
                'https://img.lesmao.vip/k/1178/T/XIAOYU/951/951_001_dj7_3600_5400.jpg',
                'https://img.lesmao.vip/k/1178/T/XiuRen/6211/6211_001_k4r_3600_5400.jpg',
                'https://img.lesmao.vip/k/1178/T/XiuRen/6211/6211_004_g66_3600_5400.jpg',
                'https://img.lesmao.vip/k/1178/T/XiuRen/6165/6165_001_gwy_3600_5400.jpg',
                'https://img.lesmao.vip/k/1178/T/XIAOYU/948/948_020_xcx_3600_5400.jpg',
            ]
        },

        methods: {
            'handleClick': function () {
                let i=Math.round(Math.random()*(this.url_list.length-1))
                this.url = this.url_list[i]
            }
        }

    })
</script>
</body>
</html>

.
.
.

小案例:每隔1s钟换一个美女图片

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>

<body>

<div id="app">
    <button @click="handleClick">点我看美女</button>
    <div>
        <img :src="url" alt="" height="600px" width="600px">
    </div>

</div>


<script>
    let vm = new Vue({
        el: '#app',
        data: {
            url: "https://img2.woyaogexing.com/2023/02/13/0253c158c222e0db0ea0bf68df21d315.jpeg",
            url_list: [
                'https://img.lesmao.vip/k/1178/T/XIAOYU/951/951_001_dj7_3600_5400.jpg',
                'https://img.lesmao.vip/k/1178/T/XiuRen/6211/6211_001_k4r_3600_5400.jpg',
                'https://img.lesmao.vip/k/1178/T/XiuRen/6211/6211_004_g66_3600_5400.jpg',
                'https://img.lesmao.vip/k/1178/T/XiuRen/6165/6165_001_gwy_3600_5400.jpg',
                'https://img.lesmao.vip/k/1178/T/XIAOYU/948/948_020_xcx_3600_5400.jpg',
            ]
        },
        methods: {
            // 第一种写法
            // 'handleClick': function () {
            //     let _this = this
            //     setInterval(function () {
            //         console.log(_this)  // 此处this对象已经不是vm了 变成了window对象了
            //         let i = Math.round(Math.random() * (_this.url_list.length - 1))
            //         _this.url = _this.url_list[i]
            //         console.log(i)
            //     }, 1000)
            // },

            // 第二种写法 可以简写成这样
                handleClick(){
                    let _this = this
                    setInterval(function () {
                        let i=Math.round(Math.random()*(_this.url_list.length-1))
                        _this.url = _this.url_list[i]
                        console.log(i)
                    },1000)}
        }

    })
</script>
</body>
</html>

.
.
.

补充 es 6 的对象写法

    var hobby = ['篮球', '足球']
    var d={'name':"lqz",age:19,'hobby':hobby}  // 正常写法
    var d={'name':"lqz",age:19,hobby:hobby}   // 正常写法
    var d = {'name': "lqz", age: 19, hobby}   // es6 的简写形式

    var f = function (a, b) {
        console.log('匿名函数')
        console.log(a + b)    }

    var d = {'name': "lqz", age: 19, f:f}  // 正常写法
    var d = {'name': "lqz", age: 19, f}   // es6 的简写形式

    var d = {'name': "lqz", age: 19, handleClick(){
          console.log('xxxxx')}}         // es6 的简写形式

    console.log(d)
    d.f()     // 就会执行匿名

    d.handleClick()   // 就会执行匿名函数

.
.
.
.
.

5 class和style 属性指令

# 本身他俩都是属性指令,但是他们比较特殊,应用更广泛,单独再讲

------------------------------------------
# class:推荐用数组

	:class='变量'
    变量可以是字符串,数组,对象

------------------------------------------
# style:推荐用对象(就字典)

	:style='变量'
    变量可以是字符串,数组,对象

------------------------------------------
# 数组的方法:很多,自己学
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
    <style>
       <!-- 类选择器 所有class值里面有font的标签都会响应 -->
        .font {font-size: 60px;}

        .red {background-color: red;}

        .green {background-color: green;}

        .font-color {color: yellow;}
    </style>
</head>
<body>

<div id="app">
    <h1>class</h1>
    <div :class="class_list">我是div</div>


    <h1>style</h1>
    <div :style="style_list">我是style-----div</div>

</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            // class_str:'font',
            class_list:['font'],  // 最推荐,因为可以往里面追加或移除字符串,就可以改变样式了
            // class_obj: {font: true, green: false, 'font-color': false},


            // style_str: 'color: green;font-size:80px',  字符串的形式
            // style_list: [{color:'yellow'}, {'font-size':'90px'}],
            // style_list: [{color: 'yellow'}, {fontSize: '90px'}],  // 可以用驼峰系统会自动转成font-size
            style_obj: {color: 'yellow', fontSize: '80px'}  // 最推荐用法就可以用对象的方法点出fontSize来额
            // style_obj: {color: 'yellow', 'font-size': '80px'}
        },

    })

</script>
</html>

我们设置的类选择器font-color是会把字体颜色变成黄色的,但是我们给class_obj字典添加一个
键值对 font-color :true 后,也写进字典了,为什么字体颜色不变成黄色?
vue的vm层一直再对数据做监听,页面变,js变量就变,js变量变,页面就变
因为用中括号的方式往字典里面加值,vm层没有监听到变化,所以就导致数据改了但页面没有变
用中括号的方式改字典里面的值,vm层是可以监听到变化的!!!
image
image
.
.
style_obj: {color: 'yellow', fontSize: '80px'}
// 最推荐用法就可以用对象的方法点出fontSize来
image
.
.
.
.
.

6 条件渲染指令 v-if=条件

# v-if=条件  放在标签上,如果条件成立,该标签就显示,如果条件不成立,该标签就不显示
# v-else-if=条件  放在标签上,如果条件成立,该标签就显示,如果条件不成立,该标签就不显示
# v-else     放在标签上,上面条件都不成立,显示这个标签

# v-else-if=条件与v-else  不能单独使用,一定要配合v-if=条件 使用
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
    <style>

    </style>
</head>
<body>

<div id="app">
    <h1>通过分数显示文字</h1>
    <div v-if="score>=90">优秀</div>
    <div v-else-if="score>=80&&score<90">良好</div>
    <div v-else-if="score>=60&&score<80">及格</div>
    <div v-else>不及格</div>


</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            score: 99
        },

    })


</script>
</html>

.
.
.
.
.

7 列表渲染指令 v-for=条件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"
          integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
</head>
<body>

<div id="app">
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-md-offset-3 text-center">
                <h1>V-if + V-for 显示购物车</h1>
                <button @click="handleClick" class="btn btn-success">点我</button>
                <div v-if="show">
                    <table class="table table-hover">
                          <thead>
                            <tr>
                              <th>id</th>
                              <td>商品名</td>
                              <td>商品价格</td>
                            </tr>
                          </thead>
                          <tbody>

                            <tr v-for="item in good_list">
                              <th scope="row">{{item.id}}</th>
                              <td>{{item.name}}</td>
                              <td>{{item.price}}</td>
                            </tr>

                          </tbody>
                    </table>

                </div>
            </div>
        </div>
    </div>


</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            show: false,
            good_list: [
                {id: 1, name: '钢笔', price: '29'},
                {id: 2, name: '铅笔', price: '29'},
                {id: 3, name: '文具盒', price: '298'},
                {id: 4, name: '彩笔', price: '298'},
            ]
        },
        methods: {
            handleClick() {
                this.show = !this.show
            }
        }
    })


</script>
</html>

.
.
.
.

补充:

# 解释器
# ide:集成开发环境,快速开发
	-pycharm
    -goland
    -vscode
    
    
    
# dtl:django template language  djagno的模板语法

作业

1 上课讲的都练习一下

3 点击开始随机美女,点击美女停下(定时器停),弹出美女地址
posted @   tengyifan  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示