自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 关于flask env的想法

无意看到源码,可以借助flask app run时加载env文件的顺序,用.env和.flaskenv做sandbox和product时的参数替换,因为先导入的是.env,后导入的是.flaskenv,可以把自定义的参数写入flaskenv并且在.gitignore中做屏蔽,让其工作在local环境中。

2023-05-11 18:47:33 148

原创 ubuntu20.04上k8s部署启动记录

推荐使用containerd作为container-runtime,否则使用docker需要安装编译cri协议的docker,比较麻烦。kubeadm:minikube start代替了kubeadm的init的功能,可以用它提前拉取下镜像。kubelet:minikube启动时会自行拉起内部的kubelet,不需要自行下载,更不用关心它的运行状态。kubectl:minikube内部有minikube kubectl的命令,可取代。涉及到的kubelet、kubeadm、kubectl原则上都不需要。

2023-03-30 19:05:30 219

原创 win11上chrome安装Burp_Suite流程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bqlgbVfO-1676981539812)(C:\Users\leidong\AppData\Roaming\Typora\typora-user-images\image-20230221200743202.png)]先配置Burp_Suite的proxy配置,设置端口web的监听8080,再配置web转发。参考readme破解,每次启动都要从序列破解器启动。和Burp_Suite版本对应,太高无法启动。

2023-02-21 20:14:13 762

原创 ubunut20搭建离线OCR工具tesseract

【代码】ubunut20搭建离线OCR工具tesseract。

2023-01-05 16:11:45 235

原创 docker buildx构建多种系统架构的镜像

【代码】docker buildx构建多种系统架构的镜像。

2022-09-16 11:16:27 627

原创 py2快速安装并启动jupyter

py2快速安装并启动jupyter。

2022-08-24 12:10:43 412

原创 LUKS Encrypt on Ubuntu 20.04 Focal

代码】LUKS Encrypt on Ubuntu 20.04 Focal。

2022-08-05 14:43:03 195

原创 docker compose yaml子网配置

innet是创建的内网名称,使用的DRIVER是bridge模式,采用ipam配置网络,配置子网的掩码和网关。而service也可以自定义自己的ip。这样多个微服务是网络通信是通过docker下的子网进行通信,数据包是由宿主机的网络再通过网桥转发到各服务中。service网络默认的模式是bridge,自定义bridge下的子网网络配置。...

2022-07-29 14:50:04 568

原创 基于jwt的web认证方案

jwt

2022-07-14 15:44:32 183

原创 python2搭建GRPC的依赖包

python2使用GRPC需要的包futures==3.3.0grpcio==1.41.1grpcio-tools==1.41.1protobuf==3.17.3protobuf版本过高会出现DecodeError: Truncated message的问题,降下来就ok了。

2022-05-31 10:16:45 392

原创 elasticsearch-dump的数据导入与导出

导出ES的indexelasticdump --input=http://user:passwd@127.0.0.1:9200/exploit --output=my_index_mapping.json --type=mappingelasticdump --input=http://user:passwd@127.0.0.1:9200/exploit --output=my_index_data.json --type=data导入数据elasticdump --input=my_index

2022-03-10 17:39:14 2576

原创 celery使用Automatic routing配置

需求:一个task文件中的不同消费者,通过不同的routing_key使用相同的队列里消费broker的消息。app = Celery('worker', broker=conf['BROKER_URL'])# task_queues定义了queue的名字和exchange的名字app.conf.task_queues = { 'new_queue': { 'exchange': 'ex', 'routing_key': 'task.#' # '#'表示all

2022-02-15 14:38:05 307

原创 DRF使用jwt对自定义Users表的认证

贴出settings,使用DRF的jwt插件是djangorestframework-simplejwt。AUTHENTICATION_BACKENDS重写User认证的AUTHENTICATION后端。DRF默认的是django自带的User表,如果只改AUTH_USER_MODEL全局变量,需要补充所有django.User带的属性,is_anonymous等。因为在后面的校验中会用到这些属性。DEFAULT_PERMISSION_CLASSES继承restframework的BasePerm

2022-01-18 13:43:58 1011

原创 协程和线程的爬虫性能对比

"""async spider"""import asyncioimport threadingimport timeimport requestsimport re, osimport aiohttpfrom aiofile import async_openclass BaseIO: def __init__(self, _output_dir, _reg): self._output_dir = _output_dir self._reg

2022-01-14 10:53:28 215

原创 DRF的权限认证逻辑

上图引用:https://www.cnblogs.com/hehecat/p/9349427.htmlDRF的View最终继承的是ModelViewSet,它继承了多个http action的mixin,并加入了get_object等方法,从而可以直接从定义类参数上完成对API的编写。使用ViewSet的好处就是可以直接复制路由。router.register(r'groups', views.GroupViewSet)但因为继承了ViewSetMixin重写了as_view方法,如果自己写路由.

2022-01-12 19:27:22 241

原创 单例模式和连接池

经常看见把SQL的连接写成单例模式,就认为可以节省内存开支和优化连接速度,更有认为这样会让数据库连接在高并发的情况下造成锁。其实并未真正体会到单例的使用场景。从连接数据库上来说,单例模式连接数据库分为两部分:得到数据库的认证和服务器信息-Datasource连接数据库-Connecting其实singleton只发生在第一步Datasource,只形成一个数据库配置实例。至于第二步Connecting和单例没有任何关系,而在高并发出现锁的时候推荐使用连接池才是正道。只有把Connecting写

2022-01-09 15:34:02 1170

原创 python partial的使用场景

functools.partial(func, *args, **keywords)Return a new partial object which when called will behave like func called with the positional arguments args and keyword arguments keywords. If more arguments are supplied to the call, they are appended to args..

2021-12-24 12:35:06 477

原创 flask中使用subquery完成中间表join连接

# 子查询select table_A_id as tableA.table_A_id, table_B_pass as tableB.pass, max_table_A_id as max(tableA.id) from tableA left outer join tableC ON tableC.xx_id = tableA.table_A_id left outer join tableB ON tableB.id = tableC.passwd_idleft outer join tabl

2021-10-08 12:49:01 242

原创 ubuntu20.04使用udev管理外设

安装udev模块apt install udevvim /lib/systemd/system/systemd-udevd.service#set "PrivateMounts=no"systemctl restart udevsystemctl daemon-reload在 /etc/udev/rules.d/ 下增加新的rule文件# There are a number of modifiers that are allowed to be used in some# of the

2021-09-29 08:24:59 1938

原创 python3对于进制的转化

# ASCII转为16进制list_identity = ["{:02x}".format(c) for c in packet]# 16进制字符串转为ASCIIpacket = ''.join([chr(int("0x" + x, base=16)) for x in list_identity])# 任意进制转化"{:02x}".format(c)"{:02b}".format(c)"{:02o}".format(c)"{:02}".format(c)# 任意进制转化10进制i

2021-08-17 10:57:30 254

原创 linux使用cups实现打印机打印功能

# 下载驱动# 插入usb# 确认插入 lsusb# 查看usb驱动位置lpinfo -v # 找到型号相关的驱动位置lpinfo -m |grep xp58# 挂载lpadmin -p printer_name -E -v "usb://xxxxxxx?serial=VNCR328593" -m drv://xxxxxxxx.ppd# 查看状态lpstat -p# 查看队列lpq# 打印lpr -P printer_name /opt/xxxx.docx# 删除打印机lp

2021-07-07 09:15:48 528

原创 sqlalchemy批量插入含有json字段的方法

考虑sqlalchemy的批量插入性能问题,参考了这位博主的博客,发现如下性能最优:db.session.execute( Device.__table__.insert(), process_data.get("insert_data"))db.session.commit()但是如果表中含有json字段想这样批量插入,尝试了各种写法都是不行的。这里推荐另一种方法可以批量插入json类型,而且性能也是不错的。db.session.bulk_insert_mappings(

2021-07-07 08:51:31 797

原创 elasticsearch聚合过滤操作

{ "query": { "bool": { "must": [ { "nested": { "path": "teacher", "query": { "bool": { "

2021-06-30 21:46:13 687 2

原创 python es批量插入数据

for form_item in forms.files: logger.info("form_item: %s", form_item) temp = property_file_upload_esbody(task_id, user, form_item) insert_es.append(temp) if len(insert_es) > 200: bulk(es_client, insert_es,...

2021-06-26 18:22:40 1642

原创 nginx解决vue跨域请求的问题

server { listen 9000 default_server; server_name localhost; root /opt/site_demo/dist; location /api { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, POST, OPTI

2021-06-25 08:40:31 331

原创 wtforms进行批量数据的自定义校验

from wtforms import Form, FormField, FieldListfrom app.error import bad_requestclass PropertyFileForm(BaseForm): ip = StringField(u'ip', [DataRequired()]) prod_version = StringField(u'设备型号', [DataRequired()]) port = StringField(u'端口', [Data

2021-06-07 16:31:02 186

原创 python celery的task-based-class写法

python celery的task-based class写法from celery import Celeryapp = Celery('worker')class NewTask(app.Task): name = 'worker.task.wifi' def run(self, **kwargs): passapp.tasks.register(NewTask)# 生产端NewTask().delay(**kwargs)这是celery1.0的写

2021-06-07 15:48:25 362 2

原创 python subprocess模块非阻塞交互

subprocess对子进程的运行可控,所以对于稍复杂的项目可以作为对os模块的替换。subprocess在主进程中启动一个子进程进行command的执行。其中提供的call,check_call,check_output等阻塞方法,是等待子进程全部执行完毕后,关掉子进程,接着执行主进程。其中call和check_call返回执行结果,而check_output将执行结果以字符串的形式返回。subprocess还提供了popen的子类,可以人为对子进程进行详细的控制。subprocess.wait(

2021-05-31 22:20:18 5867 3

原创 elasticsearch使用scroll做数据分页

from elasticsearch import Elasticsearches_client = Elasticsearch(hosts=ES_URL, timeout=600)query_data = es_client.search(index="xxx", scroll=scroll_tm, size=es_scroll_size, body=body) if query_data.get("hits").get("hits"): scroll_id = query_d

2021-05-27 18:07:03 637

原创 Dash实现多路由的跳转

在做项目的时候发现这个功能在官方文档中没有demo,网上博客的也很少,于是参考文档写了个大致的框架,其实dash的结构还是异步的处理方式,callback是数据处理的核心。多页面布局app.layout = html.Div([ dcc.Location(id='url', refresh=False), html.Div(id='page-content')])index_page = html.Div(children=[])detail_page = html.Div(chi

2021-05-15 17:17:05 1021

原创 yield异步编程

def fun_inner(): i = 0 while True: print(222) i = yield idef fun_outer(): a = 0 b = 1 inner = fun_inner() #在一个生成器函数未启动之前,是不能传递数值进去。必须先传递一个None进去或者调用一次next(g)方法,才能进行传值操作 inner.send(None) print(333) while Tr

2021-05-12 12:38:22 123

原创 创造新类和改变类行为

metaclass的意义对象实例化的过程:调用 _new_ 方法 ,创造实例调用 _init_ 方法 ,初始化实例在new方法中,可以对类就行实例化时的操作,例如单例模式在这里对其做了判断。class SingleMod: def __new__(cls): if hasattr(cls, "_instance"): return cls._instance cls._instance = super().__new__(cls)

2021-04-06 12:09:44 141

原创 python的多线程和协程的区别和应用

多线程python的多线程由于全局锁并不能并行,而是是单线程执行的分时复用模式。线程A占用CPU,获得GIL锁。遇到IO操作,中断,则释放锁。没遇到IO,则执行1000字节指令(py2)或者执行运行时间15ms,释放。根据竞态原则,抢到的线程会占用cpu,从新获得GIL。每个线程可能会由各种计算和IO操作组成,再整个执行过程中,cpu会因为上述原因不断地在各个线程之间切换,使得线程在执行IO的时候,cpu不会空等它结束而是去服务其他线程,这样就造成了多线程像是并行一样的效果。协程协程虽然

2021-03-19 00:15:06 1170

原创 从lenet-5到深度学习网络

特征图(feature map)二维卷积层输出的二维数组可以看作输入在空间维度(宽和高)上某一级的表征。感受野(Receptive Field)某个特征映射到输入空间的区域大小。全局: 某一层的特征能看到输入图像的特征区域大小。局部: 某一层的特征能看到上一层的特征区域大小。感受野大小的计算是个递推公式:k:kernel size (卷积核)p:padding size (填充大小)s:stride size(步长,卷积跨度)Layer:用Layer表示feature map,Lay

2021-03-02 16:48:08 259 1

原创 简谈python中的__call__和类方法的使用场景

python的魔法方法__call__和实例方法,都可以实现一个功能,但是在哪种情况下应该使用呢?当类要表达它的多态,开放各类的需求api时候,使用类方法是比较好的。他的生命延展就像是一个不断分叉的树。但如果定义一个类最终只是向外暴露出一个api,剩下的类方法都为它服务的,那选择call我觉得合适一些。...

2021-01-27 13:44:18 746 1

原创 简析django源码中对csrf的处理

csrf跨站点请求伪造(Cross—Site Request Forgery),具体过程如下:用户登录后访问某网站A,将cookies存在浏览器。在未退出的情况下访问另一个网站B,这时候携带的信息就会全部发给B。网站B拿着你的信息又去访问A,这样就造成了跨站请求伪造。解决方案检验http headers中的Referer,它的内容就是这次http请求的网站地址。对于服务端来说,在请求头部信息里我们可以过滤出有害请求地址的黑名单。添加随机参数token,来每一次请求到来后,对比token值

2021-01-13 09:13:51 173

原创 微信小程序的接入流程梳理

微信小程序的开放平台其实就是结合了客户端和服务端两个的开放平台,我们要分别用两个角色来看这套接入流程。普通的第三方开放平台只是后台开发服务器的接入,而微信则不同,首先它本身就是个终端,可以在终端有各类的开放接口获取硬件方面的信息,而且还可以把服务端的信息用开放api的形式暴露给开发者。这就形成了它特有的开放模式。客服端小程序的接入文档要看API这一栏,基本的流程是:wx.login登录,产生code临时码,我们要用wx.request传到服务端。(后面说它的用处)判断是否需要授权,因为部分接

2021-01-07 08:46:06 2569

原创 浅谈python的工厂方法模式

在python的设计模式中,常用的还有工厂模式。工厂模式分为简单工厂模式,工厂模式,抽象工厂模式。其实就是对面向对象开发由浅入深,由具体到抽象的一种设计理念,它对代码有低耦合,避免重复工作。简单工厂模式简单的单类解决问题,写好类后,在工厂接口类在里通过判断区分到底应该实例化哪一个类。缺点在于每次实例化需要传参,而且添加新内容时候,判断中还需新入口词。开放-封闭原则。class Language: passclass English(Language): def speak(self):

2021-01-05 23:13:15 92

原创 设置erverything iso为linux的repo源离线安装

最近在做操作系统方面的东西,发现如果repo源不足或者离线情况下,想装一个包或者组件真是手足无措。我们可以利用晚上继承好的各类软件的iso文件,把它挂载到我们的系统上,把repo源路径从https改为file,从本地就可以拉去想要的软件了。现以virtualbox虚拟机为例演示。下载iso这个很好找,在晚上搜everything iso镜像,就会有。需要注意的是看好各自的系统,如果是debian的请下载的debian的everything镜像,centos请找centos。配置虚拟机关闭系统,在

2020-12-31 20:00:40 584

原创 简谈python中的mixin混合类

mixin是一种通用语言的设计模式,在python中指的就是多重继承。最近在看django2.0以上的源码时,发现主体框架都是mixin模式比较多,整体看起来非常有舒适感。因此想简单谈谈我对mixin使用的感悟。为什么要用mixin面向对象编程特点中的一个就是继承性,mixin是多重继承,难道是继承的时候多写了两个类就是mixin了么?先说结论,mixin指在继承原始类的功能下,把附加的不好抽象到父类的功能,写个新类出来继承,便是mixin。举个常用栗子:Class Bird: def paw(s

2020-12-29 14:05:11 486

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除