RE模块
RE模块(python中的正则)Python使用re模块提供了正则表达式处理的能力
常量
常量
说明
re.Mre.MULTILINE
多行模式
re.Sre.DOTALL
单行模式
re.Ire.IGNORECASE
忽略大小写
re.Xre.VERBOSE
忽略表达式中的空白字符
使用|位 或运算符开启多种选项
方法编译re.compile(pattern, flags=0)
设定flags,编译模式,返回正则表达式对象regex
pattern就是正则表达式字符串,flags是选项。正则表达式需要被编译,为了提高效率,这些编译后的结果被保存,下次使用童谣的pattern的时候,就不需要再次编译。
re的其他方法为了提高效率都调用了编译方法,就是为了提速
单词匹配re.match(pattern, string, flags=0)
regex.match(string[, pos[,endpos]])
match匹配从字符串的开头匹配,regex对象match方法可以重设定开始位置和结束位置。返回match对象
re.search(patt ...
SocketServer
SocketServersocket编程过于底层,编程虽然有套路,但是想要写出健壮的代码还是比较困难的,所以很多语言都对socket底层api进行封装,Python的封装就是socketserver模块。它是网络服务编程框架,便于企业级快速开发
类的继承关系+------------+
| BaseServer |
+------------+
|v
+-----------+ +------------------+
| TCPServer |------->| UnixStreamServer |
+-----------+ +------------------+
|v
+-----------+ +--------------------+
| UDPServer |------->| UnixDatagramServer |
+-----------+ +--------------------+
SocketServer 简化了网络服务器的编写。
他有4个同步类
TCPServer
UDPServer
UnixStreamS ...
Vue前端构建
Vue前端构建vscode插件
ESLint:ES语法规则检查,例如no-console禁止console.log
Vetur:Vue语法高亮、提示完成、语法检查、格式化等
Prettier、todo tree
全局安装
全局Nodejs安装
参考https://npmmirror.com/
$ npm config list
$ npm config set registry https://registry.npmmirror.com
上面命令会在当前用户家目录增加~/.npmrc文件,写入配置
如果需要本项目配置,请在项目根目录下建立.npmrc,写入
registry=https://registry.npmmirror.com
全局yarn安装:yarn可以看作是npm的增强版。yarn有更好的速度、解决依赖的能力
$ npm install -g yarn
全局安装VueCLI
$ yarn global add @vue/cli
或
$ npm install -g @vue/cli
可以使用 npm config list 查看信息。
创建项目全局安装过了V ...
argparse模块
argparse 模块一个可执行文件或脚本都可以接受参数
$ ls -l /etc
/etc 是位置参数
-l 是短选项
argparse 模块就提供了参数分析的功能
参数分类
位置参数:参数放在那里,就要对应一个参数位置。例如/etc/ 就是对应一个参数的位置
选项参数:必须通过前面是-的短选项或–的长选项,然后后面的才算该选项的参数,当然选项后面也可以没有参数
上例子中,/etc/对应的就是位置参数,-l对应的是选项参数
基本解析import argparse
parser = argparse.ArgumentParser() #获得一个参数解析器
args = parser.parse_args() #分析参数
parser.print_help() #打印帮助
运行结果
usage: parser-test.py [-h]
optional arguments:
-h, --help show this help message and exit
Process finished with exit code 0
argpa ...
functools模块
functools模块reduce
functools.reduce(function , iterable[,initial])
就是减少的意思
初始值没有提供就可在可迭代对象中取一个
from functools import reduce
s = sum(range(10))
print(s)
s = reduce(lambda x:x ,range(10))
print(s)#TypeError: <lambda>() takes 1 positional argument but 2 were given
从上面的异常推断lambda应该2个参数
s = reduce(lambda x,y: print(x,y), range(10))
print(s)
返回结果如下
0 1
None 2
None 3
None 4
None 5
None 6
None 7
None 8
None 9
None
上一次lambda函数返回值会成为下一次的x
from functools import reduce
s = sum
s = sum(range(10))
pr ...
kubernetes业务容器化案例(nginx+tomcat)
kubernetes 业务容器化案例(nginx+tomcat)业务容器化优势:
提高资源利用率、节约部署成本
提供部署效率,基于kubernetes实现微服务的快速部署与交付、容器的批量调度与秒级启动
实现横向扩容、灰度部署、回滚、链路追踪、服务治理等
可根据业务负载进行自动弹性伸缩
容器将环境和代码打包再镜像内,保证了测试与生产环境的一致性
紧跟云原生社区技术发展的步伐,不给公司遗留技术债,为后期技术升级夯实了基础
为个人储备前言技术
业务容器化案例之一:业务规划及镜像分层构建:
开发将代码push到gitlab,通过jenkins将代码拉取到服务器,然后通过maven等编译工具进行编译,将代码编程成jar包或war包,然后通过dockerfile打包镜像,把镜像传到harbor仓库,通过k8s启动镜像
镜像分层
业务容器化案例之二:Nginx+Tomcat+NFS实现动静分离
分为这几步:
Nginx基础镜像制作
Nginx业务镜像制作
Nginx业务镜像测试
在kubernetes环境运行nginx
JDK基础镜像制作
tomcat基础镜像制作
tomcat业务镜像app ...
猛犸系统-主页功能开发
主页功能开发Flex布局采用Flex布局得元素,成为Flex容器,简称容器。它得所有子元素自动成为容器成员,成为Flex项(Flex item)
Flex布局有两个轴,主轴和侧轴(cross,交叉轴)。
默认X为主轴,从左向右;侧轴Y轴,垂直向下。默认线性沿着主轴排列,不换行。
justify-content 设置主轴上子元素排列方式
flex-start 默认值,沿着主轴排列。如果主轴是row,子元素从左至右排列
flex-end 从右开始对齐
center 子元素居中对齐
space-around 平分剩余空间
space-between 先两边贴边,再平分剩余空间(重要)
align-items 设置侧轴上的子元素的排列方式(单行)
控制一行元素侧轴上的排列效果
flex-start 从头开始
flex-end 从尾开始
center 居中
stretch 沿着侧轴拉伸,子元素不要给高度
div a中增加2个div b和c,默认div是block,所以这b、c是各占一行。a采用flex后,b、c称为Flex item,并挤在一起了。默认所有子元素按照行从左开始排列,默 ...
实现链表结构
实现链表结构用面向对象实现LinkedList链表
单向链表实现append、iternodes方法
双向链表实现append、pop(尾部弹出)、insert、remove(使用索引移除)、iternodes方法
为链表提供__getitem__、__iter__、__setitem__等方法
链表实现LinkedList链表
链表有单向链表、双向链表
对于链表来说
每一个节点是一个独立的对象,节点对象有内容,还知道下一跳是什么
链表则是一个容器,它内部装着一个个节点对象
所以,建议设计2个类,一个是节点Node类,一个是链表LinkedList类。
如同一个箱子是容器,里面放的小球就是一个个节点。
如同一串珠子,节点对象是一个个珠子,每一颗珠子关联其前后的珠子,所有珠子形成串珠的概念,相当于容器。一串珠子可以从固定一头提起,这是单向链表;如果这串珠子可以从两头中的任意一头提起,这就是双向链表。
单向链表实现#解决NodeList注解延后,3.10之前使用注解延后评估功能必须有下一句
from __future__ import annotations
class ...
猛犸系统-导航菜单功能
导航菜单功能后台权限参考:https://www.django-rest-framework.org/api-guide/permissions/
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'utils.exceptions.global_exception_handler',
'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework_simplejwt.authentication.JWTAuthentication'],
'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.IsAuthenticated',] # 全局,要求被认证,也就是登录成功
}
主路由
from django.urls import path
from rest_framework_simplejwt.views import (
TokenObtainPairView, # 没有提供CRUD,提供了 ...
python序列化和反序列化
序列化和反序列化序列化的原因:
内存中的字典、列表、集合以及各种对象,如何保存到一个文件中?
如果是自己定义的类的实例,如何保存到一个文件中?
如何从文件中读取数据,并让他们在内存中再次恢复成自己对应的类的实例?
要设计一套协议,按照某种规则,把内存中数据保存到文件中。文件是一个字节序列,所以必须把数据转换成字节序列,输出到文件。这就是序列化。
反之,从文件的字节序列恢复到内存并且还是原来的类型,就是反序列化。
定义
serialization序列化
将内存中对象存储下来,把它变成一个个字节。数据结构->二进制
deserialization 反序列化
将文件的一个个字节恢复成内存中对象。二进制->数据结构
序列化保存到文件就是持久化。
可以将数据序列化后持久化,或者网络存储;也可以将从文件中或者网络接受到的字节序列反序列化。
python提供了pickle库
picklePython中的序列化、反序列化模块。
函数
说明
dumps
对象序列化为bytes对象
dump
对象序列化到文件对象,就是存入文件
loads
从bytes对象反序列化 ...