![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Python
文章平均质量分 73
极地星光
这个作者很懒,什么都没留下…
展开
-
对象存储——CDN
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言常见问题前言使用第三方OSS服务的好处是集成了CDN服务,下面来了解一下什么是CDN。CDN全称:Content Delivery Network或Content Distribute Network,即内容分发网络是将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。基本思路尽可能避开互联网原创 2021-07-19 21:51:02 · 543 阅读 · 0 评论 -
对象存储——七牛云存储
七牛云存储前言需求编码前言需求在项目中,如用户头像、文章图片等数据需要使用文件存储系统来保存方案自己搭建文件系统服务选用第三方对象存储服务我们在头条项目中使用七牛云对象存储服务 http://www.qiniu.com。使用注册新建存储空间使用七牛SDK完成代码实现七牛Python SDK 网址 https://developer.qiniu.com/kodo/sdk/1242/python安装SDKpip install qiniu编码七牛提供的上传代码参考示例f原创 2021-07-19 21:25:46 · 322 阅读 · 0 评论 -
JWT禁用问题
JWT禁用问题前言需求前言需求token颁发给用户后,在有效期内服务端都会认可,但是如果在token的有效期内需要让token失效,该怎么办?此问题的应用场景:用户修改密码,需要颁发新的token,禁用还在有效期内的老token后台封禁用户解决方案在redis中使用set类型保存新生成的tokenkey = 'user:{}:token'.format(user_id)pl = redis_client.pipeline()pl.sadd(key, new_token)pl原创 2021-07-15 08:50:12 · 353 阅读 · 0 评论 -
JWT的Python库
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档JWT的Python库前言独立的JWT Python库项目封装前言独立的JWT Python库itsdangerousJSONWebSignatureSerializerTimedJSONWebSignatureSerializer (可设置有效期)pyjwthttps://pyjwt.readthedocs.io/en/latest/安装 $ pip install pyjwt用例 >&原创 2021-07-12 15:37:25 · 261 阅读 · 0 评论 -
JWT & JWS & JWE
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档JWT & JWS & JWE前言Json Web Token(JWT)JSON Web Signature(JWS)JSON Web Encryption(JWE)前言Json Web Token(JWT)JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在两个组织之间传递安全可靠的信息。官方定义:JSON Web Token (JWT) is a compact URL-sa原创 2021-07-08 21:09:26 · 225 阅读 · 0 评论 -
HMTT——Redis
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档Redis前言1 Redis事务基本事务指令Python客户端操作2 Redis持久化RDB 快照持久化AOF 追加文件持久化3 Redis高可用4 Redis集群5 用途6 相关补充阅读前言1 Redis事务基本事务指令Redis提供了一定的事务支持,可以保证一组操作原子执行不被打断,但是如果执行中出现错误,事务不能回滚,Redis未提供回滚支持。multi 开启事务exec 执行事务127.0.0.1:6379>原创 2021-07-07 20:15:51 · 126 阅读 · 0 评论 -
HMTT——数据库优化
数据库优化前言数据库优化1 理解索引2 SQL查询优化3 数据库优化前言数据库优化数据库是Web应用至关重要的一个环节,其性能的优劣会影响整合Web应用,所以需要对数据库进化优化以提高使用性能。以下提供几点方法作为参考。1 理解索引2 SQL查询优化避免全表扫描,应考虑在 where 及 order by 涉及的列上建立索引;查询时使用select明确指明所要查询的字段,避免使用select *的操作;SQL语句尽量大写,如 SELECT name FROM t WH原创 2021-07-06 19:48:40 · 421 阅读 · 0 评论 -
HMTT——分布式ID
分布式ID前言1 方案选择UUIDTwitter's Snowflake algorithm implementation which is used to generate distributed IDs.https://github.com/twitter-archive/snowflake/blob/snowflake-2010/src/main/scala/com/twitter/service/snowflake/IdWorker.scala64位ID的划分最大取值计算移位偏移计算序号循环掩码Tw原创 2021-07-06 19:09:07 · 461 阅读 · 0 评论 -
HMTT——数据库理论
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档数据库理论前言1. 复制集与分布式2. MySQL1) 主从复制2)分库分表(sharding)垂直拆分水平拆分3 黑马头条项目应用前言1. 复制集与分布式复制集(Replication)数据库中数据相同,起到备份作用高可用 High Available HA分布式(Distribution)数据库中数据不同,共同组成完整的数据集合通常每个节点被称为一个分片(shard)高吞吐 High Throughput复制原创 2021-07-04 11:38:08 · 374 阅读 · 0 评论 -
HMTT——SQLAlchemy操作
SQLAlchemy操作前言1 新增2 查询3 更新4 删除5 事务前言1 新增user = User(mobile='15612345678', name='itcast')db.session.add(user)db.session.commit()profile = Profile(id=user.id)db.session.add(profile)db.session.commit()对于批量添加也可使用如下语法db.session.add_all([user1, user2原创 2021-07-03 10:37:42 · 124 阅读 · 0 评论 -
HMTT——SQLAlchemy映射构建
SQLAlchemy映射构建前言1 简介2 安装3 数据库连接设置4 模型类字段与选项5 构建模型类映射前言1 简介SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy首次发行于2006年2月,并迅速地在Python社区中最广泛使用的ORM工具之一,不亚于Django的ORM框架。Fla原创 2021-07-02 21:17:49 · 158 阅读 · 0 评论 -
HMTT——ORM
理解ORM前言orm作用使用ORM的方式选择前言orm作用省去自己拼写SQL,保证SQL语法的正确性一次编写可以适配多个数据库防止注入攻击在数据库表名或字段名发生变化时,只需修改模型类的映射,无需修改数据库操作的代码(相比SQL的话,可能需要同步修改涉及到的每一个SQL语句)使用ORM的方式选择(1)先创建模型类,再迁移到数据库中优点:简单快捷,定义一次模型类即可,不用写sql缺点:不能尽善尽美的控制创建表的所有细节问题,表结构发生变化的时候,也会难免发生迁移错误原创 2021-07-02 20:53:45 · 201 阅读 · 0 评论 -
HMTT——数据库设计
数据库设计前言1 需求2 注意事项MySQL数据库引擎前言1 需求根据黑马头条前台产品原型图中用户端的部分,进行数据库设计。表结构字段类型、是否允许为null、是否有默认值索引设计数据库引擎的选择2 注意事项为了查询效率,可以做冗余字段设计(空间换时间的思想,属于一种反范式设计)字段类型的选择整型的存储大小与显示大小mysql的字段,unsigned int(3), 和unsinged int(6), 能存储的数值范围是否相同。如果不同,分别是多大?我们建立下面这张表:CR原创 2021-06-30 08:29:59 · 163 阅读 · 0 评论 -
Django——Admin站点
Admin站点前言使用Admin站点1 管理界面本地化2 创建超级管理员3 App应用配置4 注册模型类5 调整站点信息前言使用Admin站点假设我们要设计一个新闻网站,我们需要编写展示给用户的页面,网页上展示的新闻信息是从哪里来的呢?是从数据库中查找到新闻的信息,然后把它展示在页面上。但是我们的网站上的新闻每天都要更新,这就意味着对数据库的增、删、改、查操作,那么我们需要每天写sql语句操作数据库吗? 如果这样的话,是不是非常繁琐,所以我们可以设计一个页面,通过对这个页面的操作来实现对新闻数据原创 2021-06-24 09:25:18 · 121 阅读 · 0 评论 -
Django——数据库
Django数据库ORM框架配置定义模型类1 定义2 迁移3 添加测试数据ORM框架O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模原创 2021-06-20 17:36:33 · 3590 阅读 · 0 评论 -
设计模式——工厂模式
工厂方法模式前言简介概念示例应用示例适用场景实现方式工厂方法模式优缺点与其它模式的关系前言工厂模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。简介意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决:主要解决接口选择的问题。何时使用:我们明确地计划不同条件下创建不同实例时。如何解决:让其子类实现工厂接口,返回的也是一个原创 2021-06-18 14:30:24 · 184 阅读 · 1 评论 -
Django——CSRF
CSRF前言CSRF防止 CSRF 攻击CSRF_TOKEN的设置过程前言CSRFCSRF全拼为Cross Site Request Forgery,译为跨站请求伪造。CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求。包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题:个人隐私泄露以及财产安全。CSRF攻击示意图客户端访问服务器时没有同服务器做安全验证防止 CSRF 攻击步骤在客户端向后端请求界面数据的时候,后端会往响应中的 cookie原创 2021-06-17 13:41:26 · 108 阅读 · 0 评论 -
Django——自带模板
Django自带模板使用前言1 模板配置使用1 配置2 定义模板3 模板渲染2 模板语法2.1 模板变量2.2 模板语句3 过滤器4 模板继承5 模板注释前言1 模板配置使用1 配置在工程中创建模板目录templates。在settings.py配置文件中修改TEMPLATES配置项的DIRS值:TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'D原创 2021-06-16 22:26:29 · 164 阅读 · 0 评论 -
Django——jinja2模板
Django中使用jinja2模板前言jinja2介绍1.安装jinja2模块2.Django配置jinja23.jinja2模板的使用绝大多数和Django自带模板一样4.jinja2自定义过滤器前言jinja2介绍Jinja2:是 Python 下一个被广泛应用的模板引擎,是由Python实现的模板语言,他的设计思想来源于 Django 的模板引擎,并扩展了其语法和一系列强大的功能,尤其是Flask框架内置的模板语言由于django默认模板引擎功能不齐全,速度慢,所以我们也可以在Django中原创 2021-06-16 13:29:11 · 308 阅读 · 0 评论 -
Django——中间件
Django中间件前言1 中间件的定义方法2 执行流程3 多个中间件的执行顺序前言Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。1 中间件的定义方法定义一个中间件工厂函数,然后返回一个可以被调用的中间件。中间件工厂函数需要接收一个可以调用的get_response原创 2021-06-11 08:51:48 · 570 阅读 · 0 评论 -
线程条件变量 Condition
Python 线程条件变量 Condition 函数前言一、原理二、应用案例一:成语接龙案例二:生产者与消费者模式总结前言Python 互斥锁 Lock,主要作用是并行访问共享资源时,保护共享资源,防止出现脏数据。Python 条件变量 Condition 也需要关联互斥锁,同时 Condition 自身提供了 wait / notify / notifyAll 方法,用于阻塞 / 通知其他并行线程,可以访问共享资源了。可以这么理解,Condition 提供了一种多线程通信机制,假如线程 1 需要原创 2021-06-08 09:16:22 · 219 阅读 · 1 评论 -
线程定时器 Timer
Python 线程定时器 Timer 原理前言一、原理二、应用总结前言一、原理指定时间间隔后启动线程!适用场景:完成定时任务,例如:定时提醒-闹钟等等.# 导入线程模块import threading'''参数介绍: interval — 定时器间隔,间隔多少秒之后启动定时器任务(单位:秒); function — 线程函数; args — 线程参数,可以传递元组类型数据,默认为空(缺省参数); kwargs — 线程参数,可以传递字典类型数据,默认为空(缺原创 2021-06-08 08:50:48 · 491 阅读 · 0 评论 -
线程事件 Event
Python 线程事件 Event前言一、介绍二、原理三、应用四、总结前言一、介绍set — 全局内置标志 Flag,将标志 Flag 设置为 True,通知在等待状态 ( wait ) 的线程恢复运行;isSet — 获取标志 Flag 当前状态,返回 True 或者 False ;wait — 一旦调用,线程将会处于阻塞状态,直到等待其他线程调用 set 函数恢复运行;clear — 将标志设置为False;二、原理事件 event 中有一个全局内置标志 Flag,值为 True原创 2021-06-08 08:40:09 · 472 阅读 · 0 评论 -
信号量semaphore
python线程信号量semaphore前言一、简介semaphore信号量相关函数semaphore信号量使用前言一、简介多线程同时运行,能提高程序的运行效率,但是并非线程越多越好,而semaphore信号量可以通过内置计数器来控制同时运行线程的数量,启动线程(消耗信号量)内置计数器会自动减一,线程结束(释放信号量)内置计数器会自动加一;内置计数器为零,启动线程会阻塞,直到有本线程结束或者其他线程结束为止;semaphore信号量相关函数acquire() — 消耗信号量,内置计数器减一;re原创 2021-06-07 19:32:28 · 171 阅读 · 0 评论 -
多线程互斥锁Lock和RLock区别
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档Python多线程互斥锁Lock和RLock区别互斥锁Lock和RLock介绍互斥锁Lock互斥锁RLock区别特殊情况互斥锁Lock和RLock介绍互斥锁LockLock被称为①原始锁,原始锁是一个②在锁定时不属于特定线程的同步基元组件,它是能用的最低级的同步基元组件。原始锁处于 “锁定” 或者 “非锁定” 两种状态之一。它被创建时为非锁定状态。它有两个基本方法, acquire() 和 release() 。当状态为非锁定时,转载 2021-06-07 19:25:07 · 3619 阅读 · 2 评论 -
线程互斥锁 Lock
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档线程互斥锁 Lock前言Python 线程互斥锁1.创建互斥锁锁定资源/解锁资源Python 线程死锁1.引入库重点总结前言Python 线程互斥锁1.创建互斥锁# 导入线程threading模块import threading# 创建互斥锁mutex = threading.Lock()锁定资源/解锁资源# 导入线程threading模块import threading# 声明全局变量g_num = 0原创 2021-06-07 19:07:08 · 326 阅读 · 1 评论 -
面向对象设计原则
面向对象设计原则是设计模式的基础,每一个设计模式都符合某一个或者多个面向对象设计原则,面向对象设计原则是用于评价一个设计模式的使用效果的重要指标之一。单一职责原则一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中在软件系统中,一个类承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责越多,相当于将这些职责耦合在一起,当其中一个职责发生变化时可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中。下面通过一个简单的实例进一步分析单一职责原则:在 Cus转载 2021-06-05 17:22:23 · 161 阅读 · 0 评论 -
设计模式——观察者模式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档观察者模式认识观察者模式观察者模式定义一、应用案例二、Python 实现总结认识观察者模式我们先看看报纸和杂志的订阅是怎么回事:报社的业务就是出版报纸向某家报社订阅报纸,只要他们有新报纸,就会给你送来,只要- - 你是他们的订户,你就会一直受到新报纸。当你不再想看的时候,取消订阅,他们就不会在送新报纸给你只要报社还在运营,就会一直有人向他们订阅报纸或取消订阅。观察者模式定义当你试图勾勒观察者模式时,可以利用报纸订阅服务转载 2021-06-05 17:03:28 · 247 阅读 · 0 评论 -
Django——类视图
类视图前言1 类视图1 类视图引入2 类视图使用2类视图原理3类视图使用装饰器3.1 在URL配置中装饰3.2 在类视图中装饰4 类视图Mixin扩展类前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考1 类视图1 类视图引入以函数的方式定义的视图称为函数视图,函数视图便于理解。但是遇到一个视图对应的路径提供了多种不同HTTP请求方原创 2021-05-31 20:45:40 · 437 阅读 · 0 评论 -
设计模式——单例模式/工厂模式
设计模式前言一、单例模式第 1 种,重写 __new__ 方法第 2 种,闭包定义装饰器第 3 种,多线程中构建单例二、工厂模式1.简单工厂2.工厂方法3.抽象工厂前言常见的设计模式,它们是:单例模式、工厂模式、构建者模式、代理模式、观察者模式一、单例模式单例模式的主要目是保证某一个实例对象只会存在一个,减少资源的消耗。第 1 种,重写 new 方法定义一个实例变量,在 new 方法中保证这个变量仅仅初始化一次# 单例模式class Singleton(object): _in.原创 2021-05-19 23:18:25 · 209 阅读 · 0 评论 -
Django——请求与响应
请求与响应一、请求Request1 URL路径参数2 Django中的QueryDict对象3. 查询字符串Query String4 请求体4.1 表单类型 Form Data4.2 非表单类型 Non-Form Data5 请求头6 其他常用HttpRequest对象属性二、相应Response1 HttpResponse2 HttpResponse子类3 JsonResponse4 redirect重定向三、Cookie1 设置Cookie2 读取Cookie四、SessionSession 的作用S原创 2021-05-16 22:03:45 · 379 阅读 · 0 评论 -
Django——配置静态文件与路由
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档静态文件与路由配置文件静态文件二、路由说明1.引入库2.读入数据总结配置文件提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考静态文件示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、路由说明1.引入库代码如下(示例):i原创 2021-05-10 22:05:17 · 731 阅读 · 0 评论 -
Django——工程搭建
Django的工程搭建目录Django的工程搭建一、环境搭建1. 创建虚拟环境2. 安装Django3. 虚拟环境和pip的命令二、创建工程1. 创建2. 工程目录说明3. 运行开发服务器三、 创建子应用1. 创建2. 子应用目录说明3.注册安装子应用四、创建视图1. 创建2. 定义路由URL一、环境搭建1. 创建虚拟环境mkvirtualenv django_3_1.11 -p python32. 安装Django使用django 1.0版本pip install django==1.0原创 2021-05-09 23:05:52 · 228 阅读 · 0 评论 -
OpenCV-Python ——图像加文字
opencv 视频添加文字和标记框前言一、OpenCV添加文字问题二、解决思路1、OpenCV图片转换为PIL图片格式2、使用PIL绘制文字3、PIL图片格式转换成OpenCV的图片格式三、完整代码前言最近做了个视屏实时处理的需求,用opencv python实现视频/图像加框以及文字(支持汉字)一、OpenCV添加文字问题OpenCV添加文字的方法putText(…),添加英文是没有问题的,但如果你要添加中文就会出现“???”的乱码,需要特殊处理一下。#主要用到cv2的两个函数,cv2.re.原创 2021-04-27 20:00:26 · 2319 阅读 · 0 评论 -
PyQT——多线程(QThread)
PyQT5线程:多线程QThread前言一、应用场景二、使用多线程解决卡顿和假死第一种:线程锁(QMutex)第二种:信号(Signal)前言一、应用场景在编写GUI界面中,通常用会有一些按钮,点击后触发事件,比如去下载一个文件或者做一些操作,这些操作会耗时,如果不能及时结束,主线程将会阻塞,这样界面就会出现未响应的状态,因此必须使用多线程来解决这个问题。二、使用多线程解决卡顿和假死1.两个按钮,分别在控制台打印不同的内容,分别点击两个按钮后,控制台会依次打印内容,多次点击按钮,程序会先循环完上原创 2021-04-26 19:11:04 · 17382 阅读 · 6 评论 -
python多线程之事件触发(线程间通信)
import threading event = threading.Event() def a(): print ( "我是第一个线程函数a,我在等待函数b来触发我..." ) event.wait() print ( "函数a: 我被函数b给触发了..." ) def b(): print ( "我是第二个线程函数b,我开始去触发函数a..." ) event. set () p = threading.Thread(tar转载 2021-01-20 11:51:47 · 674 阅读 · 0 评论 -
Python使用struct处理二进制(pack和unpack用法)
python有时需要处理二进制数据,例如 存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用struct来处理c语言中的结构体.struct模块中最重要的三个函数是pack(), unpack(), calcsize按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流)pack(fmt, v1, v2, …)按照给定的格式(fmt)解析字节流string,返回解析出来的tupleunpack(fmt,string)计算给定转载 2020-09-21 23:07:23 · 3353 阅读 · 0 评论 -
python——精华技巧
1、大量的if-else结构采用字典key来匹配。days = "Mon Tue Wed Thu Fri Sat Sun".split()classes = "Eng Chi Mat Phy Che Res".split()week_classes = dict(zip(days, classes))def get_calss(day): if day not in week_classes: raise ValueError("Not a correct day")原创 2020-09-02 20:41:42 · 183 阅读 · 0 评论 -
正则表达式——验证数字
验证数字:^[0-9]*$验证n位的数字:^\d{n}$验证至少n位数字:^\d{n,}$验证m-n位的数字:^\d{m,n}$验证零和非零开头的数字:^(0|[1-9][0-9]*)$验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$验证非零的正整数:^\+?[1-9][0-9]*$...原创 2020-05-03 07:29:43 · 7082 阅读 · 0 评论 -
python获取当前时间的用法
1.先导入库:import datetime2.获取当前日期和时间:now_time = datetime.datetime.now()3.格式化成我们想要的日期:strftime()比如:“2016-09-21”:datetime.datetime.now().strftime(’%Y-%m-%d’)4.在当前时间增加1小时:add_hour=datetime.datetime.now(...原创 2020-04-19 16:00:37 · 197 阅读 · 0 评论