当前位置: 首页 > news >正文

vue基础(三)

常用指令

1. v-bind

固定绑定与动态绑定:

语法:
        标准语法:v-bind:属性="动态数据"
        简写语法::属性="动态数拓"

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>vue学习使用</title><!-- 第1步: 引入vue库文件 --><script src="./js/vue.js"></script>
</head><body><!-- 第2步:挂载点 --><div id="app"><!-- v-bind动态属性数据绑定 --><!-- 固定 --><!-- <img src="http://www.mobiletrain.org/images_index/right-fixed-face.png" alt=""> --><!-- src属性中的数据它是通过data数据源中得到的 -- 动态 --><!-- 语法:标准语法:v-bind:属性="动态数据"简写语法::属性="动态数拓"--><img v-bind:src="src" alt=""><img :src="src" alt=""></div><!-- 第3步:实例化vue --><script>const vm = new Vue({el: '#app',data: {src: 'http://www.mobiletrain.org/images_index/right-fixed-face.png'}})</script></body></html>

2. v-for

概述:对一组数组或对象的选项列表进行渲染。

v-for指令需要使用 (item,index) in 数组或对象 形式的特殊语法,同时还需要指定key值,key的作用在vue进行新旧数据比对渲染页面里,如果有key值会提升比对性能,加快渲染,key使用唯一的值来赋值。

vue2中小括号可以写,也可以不写,在vue3中一定要写小括号

注意:

  1. vue2中如果一个标签中同时有v-if和v-for,则v-for的优先级高于v-if,所以在vue2中不推荐两者在一个标签中
  2. vue3中v-if优先级高于v-for
  3. v-for="(元素,索引) in/of 数组"
  4. v-for="(元素,键名,索引) in/of 对象"
  5. v-for,建议给循环项每个添加一个key来作标识,用于提升性能,key值,一定要唯一不重复的,不太建议使用循环的索引当作key值,一般在和后台请求数据时,要求后台提供一个唯一的id给我们
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>vue学习使用</title><!-- 第1步: 引入vue库文件 --><script src="./js/vue.js"></script>
</head><body><!-- 第2步:挂载点 --><div id="app"><!-- <li v-for="(item,index) in user">{{index}} -- {{item}}</li> --><!-- <li v-for="item,index in user">{{index}} -- {{item}}</li> --><li v-for="item,index in user" :key="item.id">{{item.name}}</li><!-- 循环对象 --><!-- <div v-for="item,key,index in user" :key="key">{{index}} -- {{key}} -- {{item}}</div> --></div><!-- 第3步:实例化vue --><script>const vm = new Vue({el: '#app',data: {// user: ['张三', '李四', '王五']user: [{ id: 2, name: '李四' }, { id: 1, name: '张三' }]// user: { id: 1, name: '张三' } }})</script></body></html>

3. v-on

3.1 v-on事件

语法:
        标准语法:v-on:事件名="实现的方法[此方法定义在vue配置中的methods中]"
        简写语法: @事件名="方法",使用很频繁

注意:

  1. 绑定的方法,它可以写小括号,也可以不写小括号
  2. 绑定的方法是可以写在data配置中,但是不建议,data中属性会进行劫持
  3. methods中定义方法不用使用箭头函数,但是在方法体中建议使用箭头函数,用来保持this指向
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>vue学习使用</title><!-- 第1步: 引入vue库文件 --><script src="./js/vue.js"></script>
</head><body><!-- 第2步:挂载点 --><div id="app"><!-- v-on:事件名="实现的方法[此方法定义在vue配置中的methods中]"v-on使用很频繁 @事件名="方法"绑定的方法,它可以写小括号,也可以不写小括号--><h3>{{num}}</h3><!-- <button v-on:click="clickFn">点击事件</button> --><button @click="clickFn">点击事件</button></div><!-- 第3步:实例化vue --><script>const vm = new Vue({el: '#app',data: {// 绑定的方法是可以写在data配置中,但是不建议,data中属性会进行劫持// clickFn: function () {//   console.log('我是一个点击事件');// }num: 100},// 注:methods中定义方法不用使用箭头函数,但是在方法体中建议使用箭头函数,用来保持this指向methods: {// clickFn: function () {//   console.log('我是一个点击事件');// }// 简写clickFn() {// var _this = thissetTimeout(() => {this.num++console.log('我是一个点击事件');}, 1000);}// 箭头函数 没有作用域,找父级// clickFn: () => {//   console.log(this);//   this.num++//   console.log('我是一个点击事件');// }}})</script></body></html>

3.2 v-on事件对象

概述:

  1. 绑定的方法,它可以写小括号,也可以不写小括号
  2. 如果你绑定方法时,没有写小括号,则vue在解析时,会自动给你映射一个event给绑定方法
  3. 如果你绑定方法时,有写小括号,则需要手动把event对象传过去$event,$event可以传多个, 但是建议只传一个,一般写在第1位或最后1位
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>vue学习使用</title><!-- 第1步: 引入vue库文件 --><script src="./js/vue.js"></script>
</head><body><!-- 第2步:挂载点 --><div id="app"><h3>{{num}}</h3><!-- 如果你绑定方法时,没有写小括号,则vue在解析时,会自动给你映射一个event给绑定方法 --><!-- <button @click="clickFn">点击事件</button> --><!-- 如果你绑定方法时,有写小括号,则需要手动把event对象传过去$event,$event可以传多个,但是建议只传一个,一般写在第1位或最后1位--><button uname="李四" data-uname="张三" @click="clickFn($event)">点击事件</button><input type="text" @keyup="onEnter"></div><!-- 第3步:实例化vue --><script>const vm = new Vue({el: '#app',data: {num: 100},methods: {// event可以用它来完成dom数据的获取clickFn(evt) {this.num++// 自定义的需要使用getAttribute方法,简写(evt.target.name)必须使用标签内置属性console.log(evt.target.getAttribute('uname'));console.log(evt.target.dataset.uname)},onEnter(evt) {// 回车键是13if (evt.keyCode === 13) {console.log(evt.target.value);}}}})</script></body></html>

4. todolist

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>vue学习使用</title><!-- 第1步: 引入vue库文件 --><script src="./js/vue.js"></script>
</head><body><!-- 第2步:挂载点 --><div id="app"><input placeholder="请输入内容" type="text" @keyup="onEnter"><hr><ul><!-- 条件渲染 --><li v-if="todos.length===0">无任务</li><li v-else v-for="item,index in todos" :key="item.id"><span>{{item.title}}</span><!-- <span @click="del(item.id)">删除</span> --><span @click="del(index)">删除</span></li></ul></div><!-- 第3步:实例化vue --><script>const vm = new Vue({el: '#app',data: {todos: []},methods: {onEnter(evt) {if (evt.keyCode === 13) {this.todos.push({// Date.now() 返回自1970年1月1日00:00:00 UTC以来经过的毫秒数id: Date.now(),title: evt.target.value.trim()})evt.target.value = ''}},// del(id) {//   // 删除//   this.todos = this.todos.filter(item => item.id != id)// }del(index) {// splice 可以用来替换/删除/添加数组内某一个值或几个值,该方法会改变初始数组。// 删除 它可以使用 vue中提供的变异方法splice来完成,用此方法它会触发视图更新this.todos.splice(index, 1)}}})</script></body></html>

5. 事件修饰符

多个修饰符,通过点来连接操作 用来处理事件的特定行为。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>vue学习使用</title><!-- 第1步: 引入vue库文件 --><script src="./js/vue.js"></script>
</head><body><!-- 第2步:挂载点 --><div id="app"><!-- 事件修饰符 --><!-- <input placeholder="请输入内容" type="text" @keyup.enter="onEnter" > --><!-- 多个修饰符,通过点来连接操作 用来处理事件的特定行为 --><!-- @keyup.alt.112:alt键+F1键 --><input placeholder="请输入内容" type="text" @keyup.alt.112="onEnter" ><hr><ul><!-- 条件渲染 --><li v-if="todos.length===0">无任务</li><li v-else v-for="item,index in todos" :key="item.id"><!-- once事件只绑定一次 --><a @click.prevent.once="showDetail" href="http://www.baidu.com">{{item.title}}</a><!-- <span @click="del(item.id)">删除</span> --><span @click="del(index)">删除</span></li></ul></div><!-- 第3步:实例化vue --><script>const vm = new Vue({el: '#app',data: {todos: []},methods: {showDetail() {console.log(1111);},onEnter(evt) {this.todos.push({id: Date.now(),title: evt.target.value.trim()})evt.target.value = ''},// del(id) {//   // 删除//   this.todos = this.todos.filter(item => item.id != id)// }del(index) {// 删除 它可以使用 vue中提供的变异方法splice来完成,用此方法它会触发视图更新this.todos.splice(index, 1)}}})</script></body></html>

6. 动态样式

6.1 class

注意:

  1. class和style都属于DOM属性,所以在vue中都用:class和:style表示

  2. 对象: {key它就是样式名称:布尔值【true生效,false不生效】} -- 一般用于开关显示的样式,不太适合添加新的属性样式

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>vue学习使用</title><!-- 第1步: 引入vue库文件 --><script src="./js/vue.js"></script><style>.active {color: red;}.font30 {font-size: 30px;}</style>
</head><body><!-- 第2步:挂载点 --><div id="app"><!-- class样式的动态添加,对象和数组方式class和style都属于DOM属性,所以在vue中都用:class和:style表示对象: {key它就是样式名称:布尔值【true生效,false不生效】} -- 一般用于开关显示的样式,不太适合添加新的属性样式--><!-- <div :class="titleClass">我是一个标题</div><button @click="addClass">添加样式</button> --><!-- 数组:[元素样式名称]一般对于追加新样式,使用数组--><div :class="titleStyle">我是一个标题</div><button @click="addStyle">添加样式</button></div><!-- 第3步:实例化vue --><script>const vm = new Vue({el: '#app',data: {titleClass: { active: false },titleStyle: []},methods: {addClass() {// 点击切换// this.titleClass.active = !this.titleClass.active// this.titleClass.active = true//这里执行的时候会刷新数据,会顺带执行了下一句// this.titleClass.font30 = true//注意,把上一句注释,只执行这一句的时候,样式不会生效,因为这里是是新加的属性,并没有被劫持// console.log(this.$data);// Vue方法// 动态给对象添加成员属性(Vue中的方法)// this.$set(this.titleClass, 'font30', true)// let obj =  Object.assign(参数1地址和返回值地址是同一个地址)},addStyle() {// 给数组添加元素,元素就是样式名称,这样它会就追加样式// push unshift shift pop splice sort reverse 调用时都会让视图更新this.titleStyle.push('active')this.titleStyle.push('font30')}}})</script></body></html>

6.2 style

style样式的动态添加,分为对象和数组方式。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>vue学习使用</title><!-- 第1步: 引入vue库文件 --><script src="./js/vue.js"></script>
</head><body><!-- 第2步:挂载点 --><div id="app"><!-- style样式的动态添加,对象和数组方式--><!-- 对象--><div :style="{color:'blue',fontSize:'30px'}">我是一个标题</div><!-- 数组--><div :style="[{color:'blue'},{fontSize:'30px'}]">我是一个标题</div><!-- <button @click="addStyle">添加样式</button> --></div><!-- 第3步:实例化vue --><script>const vm = new Vue({el: '#app',data: {},methods: {}})</script></body></html>

7. input表单

概述:

在没有使用v-model指令时,来通过data数据控制表单项中的值,还是麻烦的,绑定属性和事件来完成 -- 受控组件 v-model它是一个语法糖,value和事件的综合体

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>vue学习使用</title><!-- 第1步: 引入vue库文件 --><script src="./js/vue.js"></script>
</head><body><!-- 第2步:挂载点 --><div id="app"><div><input type="text" v-model="username"></div></div><!-- 第3步:实例化vue --><script>const vm = new Vue({el: '#app',data: {username: ''},methods: {setUsername(evt) {this.username = evt.target.value.trim()}}})</script></body></html>

8. v-model修饰

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>vue学习使用</title><!-- 第1步: 引入vue库文件 --><script src="./js/vue.js"></script>
</head><body><!-- 第2步:挂载点 --><div id="app"><!-- v-model修饰符 --><!-- 延时更新数据源中的数据 光标移开才会改变数据 --><!-- <input v-model.lazy="title"> --><!-- 去空格 trim --><!-- <input v-model.trim="title"> --><!-- 转为数值 number --><input type="number" v-model.number="n1">+<input type="number" v-model.number="n2">= {{n1+n2}}</div><!-- 第3步:实例化vue --><script>const vm = new Vue({el: '#app',data: {title: '',n1: 1,n2: 2}})</script></body></html>

相关文章:

vue基础(三)

常用指令 1. v-bind 固定绑定与动态绑定&#xff1a; 语法&#xff1a; 标准语法&#xff1a;v-bind:属性"动态数据" 简写语法&#xff1a;:属性"动态数拓" <!DOCTYPE html> <html lang"en"><head><me…...

使用Python开发PPTX压缩工具

引言 在日常办公中&#xff0c;PPT文件往往因为图片过大而导致文件体积过大&#xff0c;不便于传输和存储。为了应对这一问题&#xff0c;我们可以使用Python的wxPython图形界面库结合python-pptx和Pillow&#xff0c;开发一个简单的PPTX压缩工具。本文将详细介绍如何实现这一…...

ubuntu24.04安装布置ros

最近换电脑布置机器人环境&#xff0c;下了24.04&#xff0c;但是网上的都不太合适&#xff0c;于是自己试着布置好了&#xff0c;留作有需要的人一起看看。 文章目录 目录 前言 一、确认 ROS 发行版名称 二、检查你的 Ubuntu 版本 三、安装正确的 ROS 发行版 四、对于Ubuntu24…...

SQL 秒变 ER 图 sql转er图

&#x1f680;SQL 秒变 ER 图&#xff0c;校园小助手神了&#xff01; 学数据库的宝子们集合&#x1f64b;‍♀️ 是不是每次碰到 SQL 转 ER 图就头皮发麻&#xff1f;看着密密麻麻的代码&#xff0c;脑子直接死机&#xff0c;好不容易理清一点头绪&#xff0c;又被复杂的表关…...

【AI知识点】如何判断数据集是否噪声过大?

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】【AI应用】 判断数据集是否 噪声过大 是数据分析和机器学习建模过程中至关重要的一步。噪声数据会导致模型难以学习数据的真实模式&#xff0c;从而影响预测效果。以下是一些常见的方法来判断数据…...

网络安全治理架构图 网络安全管理架构

网站安全攻防战 XSS攻击 防御手段&#xff1a; - 消毒。 因为恶意脚本中有一些特殊字符&#xff0c;可以通过转义的方式来进行防范 - HttpOnly 对cookie添加httpOnly属性则脚本不能修改cookie。就能防止恶意脚本篡改cookie 注入攻击 SQL注入攻击需要攻击者对数据库结构有所…...

如何写出优秀的单元测试?

写出优秀的单元测试需要考虑以下几个方面&#xff1a; 1. 测试用例设计 测试用例应该覆盖被测试代码的不同场景和边界情况&#xff0c;以尽可能发现潜在的问题。在设计测试用例时需要关注以下几点&#xff1a; 输入输出数据&#xff1a;要测试的函数或方法可能有多个输入参数…...

数据留痕的方法

在项目中&#xff0c;数据变更时&#xff0c;经常需要记录上次的数据&#xff0c;以便查看对比&#xff0c;专业术语叫做数据留痕。数据变更留痕&#xff08;即记录数据的变更历史&#xff09;是一个常见的需求&#xff0c;例如在审计、追踪数据变化或满足合规性要求的场景中。…...

机器学习数学基础:19.线性相关与线性无关

一、线性相关与线性无关的定义 &#xff08;一&#xff09;线性相关 想象我们有一组向量&#xff0c;就好比是一群有着不同“力量”和“方向”的小伙伴。给定的向量组 α ⃗ 1 , α ⃗ 2 , ⋯ , α ⃗ m \vec{\alpha}_1, \vec{\alpha}_2, \cdots, \vec{\alpha}_m α 1​,α 2…...

ArgoCD实战指南:GitOps驱动下的Kubernetes自动化部署与Helm/Kustomize集成

摘要 ArgoCD 是一种 GitOps 持续交付工具,专为 Kubernetes 设计。它能够自动同步 Git 仓库中的声明性配置,并将其应用到 Kubernetes 集群中。本文将介绍 ArgoCD 的架构、安装步骤,以及如何结合 Helm 和 Kustomize 进行 Kubernetes 自动化部署。 引言 为什么选择 ArgoCD?…...

JVM虚拟机以及跨平台原理

相信大家已经了解到Java具有跨平台的特性&#xff0c;即“一次编译&#xff0c;到处运行”&#xff0c;例如在Windows下编写的程序&#xff0c;无需任何修改就可以在Linux下运行&#xff0c;这是C和C很难做到的。 那么&#xff0c;跨平台是怎样实现的呢&#xff1f;这就要谈及…...

【AIGC提示词系统】基于 DeepSeek R1 + ClaudeAI 易经占卜系统

上篇因为是VIP&#xff0c;这篇来一个免费的 提示词在最下方&#xff0c;喜欢的点个关注吧 引言 在人工智能与传统文化交融的今天&#xff0c;如何让AI系统能够传递传统易经文化的智慧&#xff0c;同时保持易经本身的神秘感和权威性&#xff0c;是一个极具挑战性的课题。本文将…...

电路笔记 : opa 运放失调电压失调电流输入偏置电流 + 反向放大器的平衡电阻 R3 = R1 // R2 以减小输出直流噪声

目录 定义影响和解决失调电压输入偏置电流平衡电阻R3推导公式&#xff1a; 失调电流 实际的运算放大器&#xff08;Op-Amp&#xff09;存在一些非理想特性&#xff0c;如失调电压&#xff08;VIO&#xff09;、失调电流&#xff08;IIO&#xff09;和输入偏置电流&#xff08;I…...

ScrapeGraphAI颠覆传统网络爬虫技术

ScrapeGraphAI颠覆传统网络爬虫技术&#xff01; 引言 在互联网时代&#xff0c;数据如同油田&#xff0c;丰富而深邃。但如何有效地提取这些数据&#xff0c;仍然是许多开发者面临的艰巨任务。你有没有想过&#xff0c;传统的网络爬虫技术是否已经过时&#xff1f;如今&…...

通过多层混合MTL结构提升股票市场预测的准确性,R²最高为0.98

“Boosting the Accuracy of Stock Market Prediction via Multi-Layer Hybrid MTL Structure” 论文地址&#xff1a;https://arxiv.org/pdf/2501.09760 ​​​​​​​ 摘要 本研究引入了一种创新的多层次混合多任务学习架构&#xff0c;致力于提升股市预测的效能。此架构融…...

java将list转成树结构

首先是实体类 public class DwdCusPtlSelectDto {//idprivate String key;//值private String value;//中文名private String title;private List<DwdCusPtlSelectDto> children;private String parentId;public void addChild(DwdCusPtlSelectDto child) {if(this.chil…...

互联网分布式ID解决方案

业界实现方案 1. 基于UUID 2. 基于DB数据库多种模式(自增主键、segment) 3. 基于Redis 4. 基于ZK、ETCD 5. 基于SnowFlake 6. 美团Leaf(DB-Segment、zkSnowFlake) 7. 百度uid-generator() 基于UUID生成唯一ID UUID生成策略 推荐阅读 DDD领域驱动与微服务架构设计设计模…...

xinference 安装(http导致错误解决)

为什么要使用xinference 安装xinference 环境 1&#xff09;conda create -n Xinference python3.11 注意&#xff1a;3.9 3.10均可能出现xinference 安装时候出现numpy兼容性&#xff0c;以及无法安装all版本 错误&#xff1a; error while attempting to bind on address&am…...

334递增的三元子序列贪心算法(思路解析+源码)

文章目录 题目思路解析源码总结题目 思路解析 有两种解法:解法一:动态规划(利用dp找到数组最长递增序列长度,判断是否大于3即可)本题不适用,因为时间复杂度为O(n^2),超时。 解法二:贪心算法:解法如上图,题目要求长度为三,设置第一个元素为长度1的值,是指长度二的…...

【Linux】29.Linux 多线程(3)

文章目录 8.4 生产者消费者模型8.4.1 为何要使用生产者消费者模型8.4.2 生产者消费者模型优点 8.5 基于BlockingQueue的生产者消费者模型8.5.1 C queue模拟阻塞队列的生产消费模型 8.6. 为什么pthread_cond_wait 需要互斥量?8.7 条件变量使用规范8.8 条件变量的封装8.9 POSIX信…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001

qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类&#xff0c;直接把源文件拖进VS的项目里&#xff0c;然后VS卡住十秒&#xff0c;然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分&#xff0c;导致编译的时候找不到了。因…...