![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Python&Go
文章平均质量分 71
菜爷面馆
大家好,
我叫青菜,
原阿里巴巴资资深软件工程师,
原梵帝IT技术总监,
45岁转行学厨师,
你们愿意看我怎么学厨师,
然后一步步走上创业之路吗?
展开
-
Signal机制之Flask 篇
昨日在读Flask_Login源代码的时候,读到user_logged_in.send()后发现没办法继续跟下去了,因为这里用了Signal机制,代码是没办法跟下去,今天我们就来了解一下Flask 的Signal机制。注:当订单完成时发送信号,两个订阅方收到该信号后分别发送短信和推送微信公众号消息,我们牛奶业务的系统当时对接的是阿里云的MQ来进行系统解藕。Flask Signal用于解藕系统行为和业务逻辑,当行为被触发时发送定义好的一个信号,与该信号绑定的业务逻辑在收到信号后会自动执行。原创 2024-03-27 19:24:12 · 257 阅读 · 0 评论 -
ReportLab创建合同PDF
有一个项目需要将电子签名后的报价合同和生成的发票发送给客户,这种发送给客户的文件一般都是使用PDF格式,主要是因为PDF特别适合阅读且不同平台打开文件格式不会变形,不过要在程序中生成PDF还是比较麻烦的,我们的发票是用Java IText生成PDF文件,而报价合同因为内容有7,8页比较长,很难用IText画出来,这个我们是通过先将报价文件Word模板渲染数据,然后将渲染数据后的Word再使用aspose-words转换为PDF并且贴上签名图片。注:构建pdf对象,然后将标题和表格添加到文档中。原创 2023-11-14 09:55:54 · 494 阅读 · 0 评论 -
Python Tkinter快速入门
Tkinter 有21个核心组件,常见的比如Label(标签)、Button(按纽)、Entry(输入框)、Frame(框架)、Menu(菜单)、RadioButton(单选)、CheckButton(复选)、Canvas(画布)、Bitmap(图像)等。接了一个小活,需要做一个比特币走势分析小工具,客户希望能安装在Mac上,考虑后决定采用Python的Tkinter+matplotlib来做,今天我们就来了快速了解一下Tkinter。注:顶部栏Menu在Mac下测试不成功,但右键弹出的Menu是可以的。原创 2023-11-06 07:32:58 · 105 阅读 · 0 评论 -
Python Faker批量生成测试数据
在做自动化测试或压力测试时会需要大批量生成测试数据,简单的方式你可以写一个存储过程使用随机函数来生成记录,但这种生成数据看起来不够真实,其实有蛮多现成的工具可以完成这一任务。注:使用faker构造user及post对象,然后批量创建记录,生成了100万条记录大约花费了30分钟左右。进入faker源代码目录faker/providers下,可以看到提供了下列类别的生成数据方法。faker是一个生成伪造数据Python第三方库,可以伪造姓名、城市等等,并且支持中文。使用flask shell交互生成测试数据。原创 2023-11-06 07:19:09 · 233 阅读 · 0 评论 -
PDF文件解析
PDF是英文Portable Document Format缩写,就是可移植的意思,它是以PostScript语言图象模型为基础,无论在哪种打印机上都可保证精确的颜色和准确的打印效果,PostScript咱也不懂,估计和SVG的原理差不多吧。原创 2023-11-05 12:07:46 · 1369 阅读 · 0 评论 -
matplotlib入门-基金走势图
注:matplotlib实际项目中应用接触比较少,网页上画统计报表图现在比较常用的是百度的ECharts,我们收银台销售报表用的也是EChars,后端Java接口提供数据,前端使用EChars将图渲染出来。它的绘图接口在matplotlib.pyplot模块中,pyplot提供和MATLIB绘图API类似的接口。plot方法:plot(x,y) 接收X轴坐标列表和Y轴坐标列表,扩展的参数可以设置线条形状,颜色等。读取csv文件格式如下,每天一条记录,第二列是基金净值,第三列是累计净值,然后画出图表。原创 2023-11-01 22:56:16 · 175 阅读 · 0 评论 -
Flask-SQLAlchemy事件钩子介绍
注:大多数据开源框架都会提供扩展点(钩子),在十几年前做数据库水平切割的时候就是扩展了IBatis 的SQL执行器,通过对UUID取模的方式做记录到对应分表的路由,其实说白了就是在SQL执行器里把SQL语句中的表名替换成分表表名 ,这样使用你这个组件的人就不用去关注具体的分表逻辑,只需要配置分表的数量和分表算法依赖的字段。属性事件的参数既有value,也有oldvalue,这和MySQL的触发器差不多,所以有文章在介绍SQLAlchemy事件时也叫触发器,其实指的就是SQLAlchemy属性事件。原创 2023-10-30 08:44:49 · 877 阅读 · 2 评论 -
Flask_Login使用与源码解读
注:Flask是一个微框架,仅提供包含基本服务的核心(路由、网关接口、模板),其它功能都是通过扩展来实现,它有无数扩展,你可以根据需要自由组合,这一系列文章我们会来介绍一下这些扩展的使用以及解读一下其源码,另外关于分布系统登录方案可以参考 《注:如果用户登录后,会将user存储在当前request_context中,我们就可以直接获取,如果request_context中没有user对象,将调用_load_user()来恢复(服务器重启就会走这个路径,浏览器并不需要重新登录)原创 2023-10-30 08:33:27 · 757 阅读 · 0 评论 -
Flask Shell 操作 SQLite
SQLite是一种嵌入式数据库,它的数据库就是一个文件,处理速度快,经常被集成在各种应用程序中,在IOS和Android开发中会用SQLite做为客户端缓存数据使用。注:因为python3内置了sqlite3,直接导入sqlite驱动,然后创建连接,打开游标即可创建表及写增删改查SQL.会在当前目录下生成一个test.db文件,你可以用DBeaver数据库管理工具创建到该文件的连接,打开后与打开MySQL差不多,可以写常规的SQL语句去维护。然后导入用户及角色对象,通过交互命令提交数据。原创 2023-10-30 08:16:41 · 860 阅读 · 0 评论 -
Flask路由机制分析之二
3、调用Flask对象的full_dispatch_request、dispatch_request方法,通过request中保存的匹配到的Rule获取endpoint以及的view_args参数,调用对应的view函数,完成一次请求分发。一个Rule实例代表一个URL模式,不同的URL生成不同的Rule实例,然后这些Rule实例会被传给Map类,形成一个包含所有URL的对象,通过这个Map对象就可以解析匹配请求对应的视图函数。Map类存储所有URL规则,这些规则就是Rule实例。map:保存Map对象。原创 2023-10-29 09:13:24 · 515 阅读 · 0 评论 -
Flask 路由机制分析之一
注:func2定义了一个入参为函数类型,并且在函数内部执行该传入的函数,这里调用时把func1这个函数传进去,这个和Java中的入参为接口,然后调用接口的方法差不多(Android中大量的callBack就是这样实现的)。注:func1内部定义了函数func2,func1执行时可以调用内部func2,直接执行func2提示未被定义,说明func2只能在func1中被调用。注:执行func1(1)返回的func3是指向func2函数的地址,然后执行func3(2)就会调用func2函数输出其返回值。原创 2023-10-29 08:57:26 · 461 阅读 · 0 评论 -
Flask Run运行机制剖析
但一般我们几乎不会直接写WSGI接口,这样编写代码还是过于低级编写维护困难,然后在WSGI基础上进一步抽象,用一个函数处理一个URL,这样就交由Web框架来做,实现WSGI的Web框架有Flask、Django、Tornado等等。WSGI全称Web Server Gateway Interface ,它是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得Python写的Web应用程序可以和Web服务器对接起来,它与JAVA体系中的Servlet是差不多的概念。原创 2023-10-28 07:45:44 · 629 阅读 · 0 评论 -
用Python订正数据
我们有一部分程序用Python写,主要是一些临时任务脚本类,用Python这种动态语言处理会更高效,做为一个程序员,个人觉得需要掌握下面几种类型的语言。1、服务端大型工程化语言,比如Java。2、前端JavaScript 语言,越来越重要了。3、一门脚本语言,比如Python。4、客户端native语言,比如Android。5、运维的Linux Shell。pymysql 是一个纯 Python 实现的 MySQL 客户端操作库,用pip可直接安装。原创 2023-10-24 18:24:37 · 78 阅读 · 0 评论 -
用Flask快速生成报表
,Pyton也有很多ORM框架,比如SQLAlchemy,Flask有对应的扩展Flask-SQLAlchemy,简化了Flask应用中使用SQLAlchemy框架。》 我们介绍了用html-table快速生成表格数据报表,今天我们再介绍一下用Python Flask 快速开发报表,使用的是最古老的套页面方式。Python有N多Web框架,最强大最出名的是Django,而Flask是一个微型的Web框架,它有一个强健的基础核心,其它功能都通过扩展来实现。原创 2023-10-23 15:44:21 · 684 阅读 · 0 评论 -
用Python快速生成报表之一
昨天两年多没有见过面的大Boss在澳洲给我老板和我开视频会议,他要求我们做到当他提出需要什么数据的时候,技术这边能够在5分钟之内快速给到他 ,我心里有一万匹马奔腾而过,Java在处理这些事情上效率比较低,php或python就方便得多,当然5分钟之内搞定那也是不太可能的,老板的话听听就行,不要和他顶嘴,哈哈,我们今天就来看一下如何用Python html-table库快速生成HTML表格页面。我们用一个简单例子来介绍,实际的数据要求会复杂很多,要区分品类、花型、销售占比、库存、采购、发货、成本等数据。原创 2023-10-23 15:29:24 · 273 阅读 · 0 评论 -
新年学新语言Go之二
从https://golang.google.cn/dl/下载Mac环境Go最新版本1.17.6,将go1.17.6.darwin-amd64.tar解压后整个go文件夹复制到/usr/local/目录下,然后配置环境变量(注:这和所有二进制包安装步骤都差不多)。:目标可执行程序运行的操作系统,支持 darwin,freebsd,linux,windows,darwin指的是Mac系统。讲了Go的牛逼之处,给自己找一个学习的理由,但是学任何一门语言基础语法还是要先掌握,虽然这是一件很枯燥的事。原创 2023-10-18 11:44:55 · 200 阅读 · 0 评论 -
Go并发编程之三
子goroutine写入阻塞,主goroutine不一定阻塞,为了演示效果代码最后加了一个死循环for{},如果没有加for{},当有缓存通道还有容量空间却不一定能往里放,因为有可能主goroutine已经执行完了,然后整个进程就Over了,子协程生命依赖于主协程这个概念Go并发编程第一篇就有介绍,但今天在写这个代码时没有意识到,折腾了好一会才发现问题,然后在朋友建议了加了空for{}。前一篇讲了Go中通道的概念,只讲了无缓存通道,这一篇我们来了解一下有缓存通道以及它与无缓存通道一些区别。原创 2023-10-22 10:45:13 · 190 阅读 · 0 评论 -
Go并发编程之四
可以看到整个执行花费了10秒多,这样写的代码是有问题的,我第2个任务其实只需要1秒钟,但这个代码从ch1通道获取数据,因为oneRoutine任务执行时间很长,会造成ch1通道阻塞,而ch1通道阻塞,整个主goroutine就阻塞了,ch2和ch3这两个通道有数据但被ch1给阻塞了,要解决这个问题就要用到多路复用select了。我们用一个例子来说明要用多路复用原因,程序中创建了三个goroutine分别执行三个不同任务,花费时间分别是10毫秒、1毫秒、2毫秒,然后任务执行完后获取任务的输出结果。原创 2023-10-22 11:17:38 · 343 阅读 · 0 评论 -
Go并发编程之二
注:这个例子来源于Microsoft,写得很好直接搬过来用了,Go是Google搞的,但微软有很好Go语言入门培训文档 (https://docs.microsoft.com/zh-cn/learn/paths/go-first-steps/),关键还是中文的。做业务系统开发碰到关于多线程最多的就是处理大量数据,如果在Java或Python中要多线程处理数据,代码就会写得很复杂,而用Go代码是如此简洁。这就彻底保证了通道的数据是goroutine安全的,而其它编程语言中共享内存是需要加锁来保证数据安全。原创 2023-10-22 10:20:24 · 155 阅读 · 0 评论 -
Go并发编程之一
新年学新语言Go系列文章已经完结,用了最简单的例子去了解Go基础语法,但Go最牛B的是它对并发的友好支持,每一门语言都有它自己独特的优势,如Java适合大型工程化项目,Python适合做数据分析及运维脚本,而Go最适合用来做高并发的网络通讯,PHP适合快速开发网站,所以有兴趣都可以学习了解一下,编程思路是互通。然而main这个主协程已经执行完成,Go进程都Over了,新创建的goroutine还没有被调度执行,所有大概率是无任何输出。这是因为在改变name变量的值之前,就给了go函数执行的机会了。原创 2023-10-22 09:59:40 · 284 阅读 · 1 评论 -
新年学新语言Go之五
Go虽然不算是面向对象语言,但它支持面向对象一些特性,面向接口编程是Go一个很重要的特性,而Go的接口与Java的接口区别很大,Go的接口比较复杂,这里仅用一个最简单例子做介绍,复杂的我也还没学。与定义结构体(struct)类似,上面代码我们定义了Shaper接口,它有一个方法Area,任何实现了这个函数(或方法)的类型我们都认为它实现了Shaper接口。1、实现接口并不需要显式声明,不用像Java那样用implements实现接口,只需要实现接口中所有方法(函数)就表示实现了该接口。原创 2023-10-20 09:35:57 · 218 阅读 · 0 评论 -
新年学新语言Go之四
任何编程语言都有类型系统,类型系统解决了数据的存取问题,它决定了使用这个类型需要开辟内存空间大小以及数据是如何存放的,也解决如何读出数据,因为在内存中相同二进制值不同类型的含义是不一样的,关于Go基础类型本篇就不做介绍了,和其它语言并无太大区别。PS:接口和嵌入类型等概念下一篇再介绍,今天让一哥们关注了我的CSDN,然后他看了我一些文章,说我很多文章看得不尽兴,裤子刚脱掉,然后就没了,哈哈,咱走的就是这个路线,希望客官用个3~5分钟可以把一个知识点看完。方法在定义的时候,会在。原创 2023-10-20 09:06:11 · 417 阅读 · 0 评论 -
新年学新语言Go之三
Go中map也是一种无序的键值对集合,和Java、Python中没有什么区别,用散列表存储数据,能够基于键快速检索数据,注:关于散列表原理下次在数据结构文章中详细整理一下。指针地址:一个指针变量可以指向任何一个值的内存地址,它所指向的值的内存地址在 32 和 64 位机器上分别占用 4 或 8 个字节,占用字节的大小与所指向的值的大小无关。Go语言的数组和Java差不多都是定长的,用于存储有相同类型的元素,数组在内存中是连续分配的,索引数组中任意数据速度都非常快。注:&取地址操作符,* 取值操作符。原创 2023-10-20 08:48:45 · 221 阅读 · 2 评论 -
新年学新语言Go之一
搜索相关知识后续内容等上班后再继续,新年新气象,从今天开始学习一下Go语言,第一次听说这门语言还是2016年的时候,然后2018年买了一本书 Go In Action,然后就没有然后了, 转眼这么多年过去了,Go语言因为在服务端开发并发方面相当有优势,现在很多公司都在用,另外为了不浪费买书的钱,也有必要把Go语言学习一下,今天先了解一下Go语言这个最重要一个特性。注:Docker和Consul都是Go开发的,Docker的使用可以看以前一些文章,还有几篇没写完。原创 2023-10-16 22:13:49 · 218 阅读 · 0 评论