第三十三篇 vue
Posted caix-1987 - 个人博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三十三篇 vue相关的知识,希望对你有一定的参考价值。
项目脚手架
vite
Vite 是一个轻量级的、速度极快的构建工具,对 Vue SFC 提供第一优先级支持。作者是尤雨溪,同时也是 Vue 的作者
要使用 Vite 来创建一个 Vue 项目,非常简单
npm init vue@latest
这个命令会安装和执行 create-vue,它是 Vue 提供的官方脚手架工具。跟随命令行的提示继续操作即可
要学习更多关于 Vite 的知识,请查看 Vite 官方文档
Vue CLI
Vue CLI 是官方提供的基于 Webpack 的 Vue 工具链,它现在处于维护模式。我们建议使用 Vite 开始新的项目,除非你依赖特定的 Webpack 的特性。在大多数情况下,Vite 将提供更优秀的开发体验
浏览器内模板编译注意事项
当以无构建步骤方式使用 Vue 时,组件模板要么是写在页面的 HTML 中,或者是内联的 JavaScript 字符串。在这些场景中,为了执行动态模板编译,Vue 需要将模板编译器运行在浏览器中。相对的,如果我们使用了构建步骤,由于提前编译了模板,那么就无须再在浏览器中运行了。为了减小打包出的客户端代码体积,Vue 提供了多种格式的“构建文件”以适配不同场景下的优化需求。
前缀为 vue.runtime.* 的文件是只包含运行时的版本:不包含编译器,当使用这个版本时,所有的模板都必须由构建步骤预先编译。
名称中不包含 .runtime 的文件则是完全版:即包含了编译器,并支持在浏览器中直接编译模板。然而,体积也会因此增长大约 14kb。
默认的工具链中都会使用仅含运行时的版本,因为所有 SFC 中的模板都已经被预编译了。如果因为某些原因,在有构建步骤时,你仍需要浏览器内的模板编译,你可以更改构建工具配置,将 vue 改为相应的版本 vue/dist/vue.esm-bundler.js。
如果你需要一种更轻量级,不依赖构建步骤的替代方案,也可以看看 petite-vue
IDE 支持
1、推荐使用的 IDE 是 VSCode,配合 Volar 插件。Volar 提供了语法高亮、TypeScript 支持,以及模板内表达式与组件 props 的智能提示
Volar 取代了我们之前为 Vue 2 提供的官方 VSCode 扩展 Vetur。如果你之前已经安装了 Vetur,请确保在 Vue 3 的项目中禁用它
2、WebStorm 同样也为 Vue 的单文件组件提供了很好的内置支持
3、其他支持语言服务协议 (LSP) 的 IDE 也可以通过 LSP 享受到 Volar 所提供的核心功能:
Sublime Text 通过 LSP-Volar 支持
vim / Neovim 通过 coc-volar 支持
emacs 通过 lsp-mode 支持
浏览器开发者插件 Vue Devtools
Vue 的浏览器开发者插件 Vue Devtools 使我们可以浏览一个 Vue 应用的组件树,查看各个组件的状态,追踪状态管理的事件,还可以进行组件性能分析
TypeScript
具体细节请参考章节:配合 TypeScript 使用 Vue。
Volar 插件能够为 <script lang="ts"> 块提供类型检查,也能对模板内表达式和组件之间 props 提供自动补全和类型验证。
使用 vue-tsc 可以在命令行中执行相同的类型检查,通常用来生成单文件组件的 d.ts 文件。
测试
具体细节请参考章节:测试指南。
Cypress 推荐用于 E2E 测试。也可以通过 Cypress 组件测试运行器来给 Vue SFC 作单文件组件测试
Vitest 是一个追求更快运行速度的测试运行器,由 Vue / Vite 团队成员开发。主要针对基于 Vite 的应用设计,可以为组件提供即时响应的测试反馈
Jest 可以通过 vite-jest 配合 Vite 使用。不过只推荐在你已经有一套基于 Jest 的测试集、且想要迁移到基于 Vite 的开发配置时使用,因为 Vitest 也能够提供类似的功能,且后者与 Vite 的集成更方便高效
代码规范
Vue 团队维护着 eslint-plugin-vue 项目,它是一个 ESLint 插件,会提供 SFC 相关规则的定义。
之前使用 Vue CLI 的用户可能习惯于通过 webpack loader 来配置规范检查器。然而,若基于 Vite 构建,我们一般推荐:
npm install -D eslint eslint-plugin-vue,然后遵照 eslint-plugin-vue 的指引进行配置。
启用 ESLint IDE 插件,比如 ESLint for VSCode,然后你就可以在开发时获得规范检查器的反馈。这同时也避免了启动开发服务器时不必要的规范检查。
将 ESLint 格式检查作为一个生产构建的步骤,保证你可以在最终打包时获得完整的规范检查反馈。
(可选) 启用类似 lint-staged 一类的工具在 git commit 提交时自动执行规范检查
格式化
Volar VSCode 插件为 Vue SFC 提供了开箱即用的格式化功能。
除此之外,Prettier 也提供了内置的 Vue SFC 格式化支持
SFC 自定义块集成
自定义块被编译成导入到同一 Vue 文件的不同请求查询。这取决于底层构建工具如何处理这类导入请求。
如果使用 Vite,需使用一个自定义 Vite 插件将自定义块转换为可执行的 JavaScript 代码。示例。
如果使用 Vue CLI 或只是 webpack,需要使用一个 loader 来配置如何转换匹配到的自定义块。示例。
底层库
@vue/compiler-sfc
这个包是 Vue 核心 monorepo 的一部分,并始终和 vue 主包版本号保持一致。它已经成为 vue 主包的一个依赖并代理到了 vue/compiler-sfc 目录下,因此你无需单独安装它。
这个包本身提供了处理 Vue SFC 的底层的功能,并只适用于需要支持 Vue SFC 相关工具链的开发者
请始终选择通过 vue/compiler-sfc 的深度导入来使用这个包,因为这样可以确保其与 Vue 运行时版本同步
@vitejs/plugin-vue
为 Vite 提供 Vue SFC 支持的官方插件
vue-loader
为 webpack 提供 Vue SFC 支持的官方 loader
如果你正在使用 Vue CLI,也可以看看如何在 Vue CLI 中更改 vue-loader 选项的文档
我的第三十三篇博客---flask
使用框架的优点:
稳定性和可扩展性强
可以降低开发难度,提高了开发效率
在Python中常用的Web框架有:
flask
django
tornado
Flask诞生于2010年,是Armin ronacher用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架
Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQL_Alchemy),都需要用第三方的扩展来实现。
其WSGI工具箱采用Werkzeug(路由模块),模块引擎则使用Jinja2.这两个也是Flask框架的核心
Flask常用扩展包:
Flask-SQLalchemy:操作数据库
Flask-script:插入脚本
Flask-migrate:管理迁移数据库
Flask-Session:Session存储方式指定
Flask-WTF:表单
Flask-Mail:邮件
Flask-Bable:提供国际化和本地化支持,翻译;
Flask-Login:认证用户状态;
Flask-OpenID:认证;
Flask-RESTful:开发REST API的工具;
Flask-Bootstrap:集成前端Twitter Bootstrap框架;
Flask-Moment:本地化日期和时间;
Flask-Admin:简单而可扩展的管理接口的框架
扩展列表:http://flask.pocoo.org/extensions/
1.中文文档(http://docs.jinkan.org/docs/flask/)
2.英文文档(http://flask.pocoo.org/docs/0.11/)
基本格式:
from flask import Flask
app=Flask(__name__)
@app.route(‘/‘)
def a():
return ‘aa‘
app.run()
打开谷歌 网址为你的ip地址后加上:再加上默认的端口号5000 页面展示为aa
app.run(host=‘0.0.0.0‘,port=80,debug=True)
host:设置为‘0.0.0.0‘时在同一个局域网别的电脑ip都能访问,不设置这个参数时只有自己的ip能访问
port:是默认端口号,为80时,网址后面不用加:你设置的端口号,
debug:在代码中修改return的值后debug的值为True时,不用重新执行程序,刷新网页即可刷新内容
拓展:
from flask import Flask
app=Flask(__name__)
@app.route(‘/<orders_id>‘) #加个<> <>里写的内容为参数
def a(orders_id):
return ‘%s‘%orders_id
app.run()
在谷歌里输入你的ip后加上/你要写的内容 网页展示内容即为你要写的内容
如果限制只能是数字的话 <int:orders_id> <float:orders_id>
return 只能返回字符串 和render_template
如果要返回字典之类的 要转成json类型
import json
json.dumps()
from flask import Flask,jsonify
return {‘a‘:‘b‘} 报错
return str({‘a‘:‘b‘}) 纯文本形式,没有数据类型,即没有键值对
return json.dumps({‘a‘:‘v‘}) 文本形式,但保留了键值对
return jsonify({‘a‘:‘v‘}) json类型 有键值对
app.conifg[‘JSON_AS_ASCII‘]=False #将返回的汉字不以ASCII形式返回
app.config.from_pyfile(‘settings.ini‘) 可以新建settings.ini 在这里写配置
重定向
from flask import Flask,redirect,url_for
app=Flask(__name__)
@app.route(‘/‘)
def a():
return ‘a‘
@app.route(‘/five‘)
def five():
return redirect(url_for(‘a‘)) #当你输入网址为你的ip+/+five 时 这个网页展示内容其实就跳转到a()方法里返回的内容
____________________________________________________________________________
重定向到黑马官网
@app.route(‘/demo5‘)
def demo5():
return redirect(‘http://www.itheima.com‘)
____________________________________________________________________________
重定向到自己写的视图函数
可以直接填写自己url路径
也可以使用url_for生成指定视图函数所对应的url
@app.route(‘/demo1‘)
def demo1():
return ‘demo1‘
#重定向
@app.route(‘/demo5‘)
def demo5():
return redirect(url_for(‘demo1‘))
____________________________________________________________________________
重定向到带有参数的视图函数
在 url_for 函数中传入参数
# 路由传递参数
@app.route(‘/user/<int:user_id>‘)
def user_info(user_id):
return ‘hello %d‘ % user_id
# 重定向
@app.route(‘/demo5‘)
def demo5():
# 使用 url_for 生成指定视图函数所对应的 url
return redirect(url_for(‘user_info‘, user_id=100))
取网址参数:
from flask import Flask,request,jsonify
app=Flask(__name__)
@app.route(‘/<id>‘)
def a(id):
return ‘%s‘%id
当你输入的网址为你的ip + / + 你要展现的内容, 页面内容即为你要展现的内容
@app.route(‘/‘)
def b():
name=request.args.get(‘name‘)
id=request.args.get(‘id‘)
return jsonify({‘name‘:name,‘id‘:id})
当你输入的网址为你的ip + /? +name=小明&id=7 展现的内容即为{‘name‘:小明,‘id‘:7}
指定文本类型:
json类型: ‘content-type‘:‘application/json‘
字符串类型:‘content-type‘:‘text/plain‘
解析类型:‘content-type‘:‘text/html‘
route:
指定路由地址
#指定访问路径为demo1
@app.route(‘/demo‘)
def demo1():
return ‘demo1‘
给路由传参
有时我们需要将同一类URL映射到同一个视图函数处理,比如:使用同一个视图函数来显示不同用户的个人信息
#路由传递参数
@app.route(‘/user/<user_id>‘)
def user_info(user_id):
return ‘hello %s‘%user_id
输入的网址后缀加的什么 在网页展示的就是什么,下面那个函数括号里必须是上面的参数
路由传递的参数默认当作string处理,也可以指定参数的类型
#路由传递参数
@app.route(‘user/<int:user_id>‘)
def user_info(user_id):
return ‘hello %d‘%user_id
这里指定int,尖括号中的内容是动态的。在此暂时可以理解为接受int类型的值,实际上int代表使用IntergeConverter去处理url传入的参数
指定请求方式
在Flask中。定义一个路由,默认的请求方式为:
GET
OPTIONS(自带)
HEAD (自带)
如果像添加请求方式,
@app.route(‘/demo2‘,methods=[‘GET‘,‘POST‘])
def demo2():
#直接从请求中取到请求方式并返回
return request.method
request属性:
request就是flask中代表当前请求的request对象,期中一个请求上下文变量(理解成全局变量,在视图函数中直接使用可以取到当前本次请求)
属性 说明 类型
data 记录请求的数据,并转换为字符串 *
form 记录请求中的表单数据 MultiDict
args 记录请求中的查询参数 MultiDict
cookies 记录请求中的cookie信息 Dict
headers 记录请求中的报文头 EnvironHeaders
method 记录请求使用的HTTP方法 GET/POST
url 记录请求的URL地址 string
files 记录请求上传的文件 *
Request.Form:获取以POST方式提交的数据(接收Form提交来的数据);
Request.QueryString:获取地址栏参数(以GET方式提交的数据)
Request:包含以上两种方式(优先获取GET方式提交的数据),它会在QueryString、Form、ServerVariable中都搜寻一遍。
requests模块发送请求有data、params两种携带参数的方法。
params在get请求中使用,data在post请求中使用。params是往url后面添加参数,data是指POST请求传入的字典或对象
以上是关于第三十三篇 vue的主要内容,如果未能解决你的问题,请参考以下文章
Android探索之旅(第三十三篇)恩?你想成为Android架构师,我这里有料呦~~(持续更新中)