- 博客(106)
- 收藏
- 关注
原创 Python 中的反射机制与动态灵活性
反射机制是指程序在运行期间能够获取任意一个已知名的类的内部信息,包括其属性、方法、构造函数等,并且能够在运行时调用任意一个对象方法。在Python中,反射通过一系列内置函数实现,如等。这些函数使得程序能够动态地访问和修改对象的属性和方法。反射机制的核心思想是一切皆对象,在 Python 中,类、函数、模块都是对象,都可以通过反射机制进行操作。Python 的反射机制和动态特性为程序设计提供了极大的灵活性。通过getattr()setattr()hasattr()delattr()
2025-08-28 21:12:13
650
原创 GitLab 代码管理平台部署及使用
秘钥如上图所示位置,把 id_rsa.pub 文件内容配置到 GitLab 中。,运行 ssh-keygen -t rsa 生成一个随机秘钥。Groups:对应公司项目,某个项目中可能会有不同数量的服务。如下图所示,点击用户头像,偏好设置中,找到本地化语言。在 window 中任一文件夹中的右键,选择。projects:对应项目中的某个服务。users:对应公司的开发人员。在GitLab 上创建一个项目。进入本地项目目录,按如下操作。
2025-08-03 10:38:57
463
原创 Python 全局解释器锁
GIL 是 CPython 解释器中的一个互斥锁。它确保在任何给定时刻,只有一个线程可以执行 Python 字节码简单来说,即使你的计算机有多个 CPU 核心,CPython 解释器也强制所有的 Python 线程在一个进程中轮流执行,一次只能有一个线程运行 Python 代码。
2025-08-02 23:00:18
1906
原创 基于Dockerfile 部署一个 Flask 应用
Docker 与 Python:容器化部署应用,实现快速发布与弹性伸缩。同目录下有个 requirements.txt 文件,项目依赖文件。然后是 docker-compose.yml 方便本地开发。接下来是 Dockerfile ,这是个构建容器的文件。以下是一个简单的 Flask 应用。
2025-08-02 22:11:36
269
原创 RabbitMQ: 基于AMQP 的开源消息代理软件
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。 队列是数据结构中概念。数据存储在一个队列中,数据是有顺序的,先进的先出,后进后出。其中一侧负责进数据,另一次负责出数据。
2025-07-29 22:35:37
921
原创 Python 中各种加密使用
编码过程中如下:首先将所有字符转化为 ASCLL 码,然后将这些 ASCLL 码转换为 8位进制数。接着,将每3个二进制数归为一组(不足3个的后面补0),形成24位,在拆分为4组,每组6位。之后,在每组的6位二进制数前补两个0,凑成8位。最后,将这些补0后的二进制数转化为十进制数,并从 Base64 编码表中 获取对应的 Base64 编码。MD5 加密,即信息-摘要算法5,能够将字符串、文件或压缩包等转化为固定长度 128bit 的串。z,0~9,+,/, =)表示。1.3 单向加密(不可逆加密)
2025-07-29 20:47:23
567
原创 __getattr__和 __getattribute__ 的用法
当实例对象访问一个不存在的属性时,会执行。不管访问的属性是否存在,一律执行此方法。方法,如果属性存在的话,就不会执行。
2025-07-29 20:46:22
308
原创 python 偏函数的使用
的函数,该函数允许固定一个或多个参数,从而创建一个新的偏函数,这个新的函数可以像原函数一样被调用,但是它会使用预先固定的参数值,这在需要重复使用某个函数但只改变部分参数时非常有用。
2025-07-29 20:44:43
158
原创 Python的魔术方法
在 Python 中,魔术方法(也称为特殊方法或杜撰方法)是一组预定义的方法名,它们以双下划线(__)开头和结尾。这些方法提供了对Python内置操作符和行为的定制能力。
2025-07-29 20:40:41
377
原创 python生成 requirement.txt 文件
该方法对项目目录的扫描,自动发现使用了哪些类库,自动生成依赖清单。生成requirement.txt文件。安装requirement.txt依赖。生成pip安装的所有依赖包。、生成项目中的依赖包。
2025-07-28 21:15:16
283
原创 生成器和迭代器的区别
迭代器适用于当你想要遍历现有集合而不必一次加载整个集合到内存中时。生成器则更适用于你需要动态生成数据,特别是当这些数据集过大以至于无法全部放入内存中时。生成器通过惰性计算提供了一种更为高效的方式来处理大规模数据集,从而进一步降低了内存消耗。
2025-07-28 21:09:15
268
原创 正向代理和反向代理的理解
正向代理是一种位于客户端与目标服务器之间的中间服务器。它代表客户端去获取资源,并将这些资源返回给客户端。主要用于保护客户端隐私,使客户端能够匿名访问互联网资源,或者绕过地理限制或网络审查。反向代理则位于客户端与多个内部服务器之间,作为对外提供服务的单一入口点。它的作用在于保护内部网络不受外部直接访问的影响,同时还可以实现负载均衡、提高安全性、增加灵活性等功能。正向代理主要是为了客户端的利益,帮助客户端间接地访问其他服务器上的资源。
2025-07-28 21:00:21
1260
原创 9.自动生成接口文档
REST framework可以自动帮助我们生成接口文档。接口文档以网页的方式呈现。自动接口文档能生成的是继承自APIView及其子类的视图。
2025-07-28 19:28:37
370
原创 8.异常处理--Exceptions
APIException 所有异常的父类ParseError 解析错误AuthenticationFailed 认证失败NotAuthenticated 尚未认证PermissionDenied 权限拒绝NotFound 404 未找到MethodNotAllowed 请求方式不支持NotAcceptable 要获取的数据格式不支持Throttled 超过限流次数ValidationError 校验失败。
2025-07-28 19:26:57
350
原创 7.DRF 过滤、排序、分页
对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持。在视图类中添加类属性filter_fields,指定可以过滤的字段局部设置,直接在视图中,指定当前视图类中调用的过滤器类。
2025-07-28 19:26:16
451
原创 6.DRF限流--Throttling
可以对接口访问的频次进行限制,以减轻服务器压力,或者实现特定的业务。一般用于付费购买次数,投票等场景使用。
2025-07-28 19:25:32
287
原创 5.DRF权限--Permissions
如需自定义权限,需继承rest_framework.permissions.BasePermission父类,并实现以下两个任何一个方法或全部是否可以访问视图, view表示当前视图对象是否可以访问模型对象, view表示当前视图, obj为模型数据对象例如:"""自定义权限,可用于全局配置,也可以用于局部配置""""""视图权限返回结果未True则表示允许访问视图类request: 本次客户端提交的请求对象view: 本次客户端访问的视图类"""# # 写在自己要实现认证的代码过程。
2025-07-28 19:24:34
297
原创 4.DRF 认证--Authentication4.DRF 认证--Authentication
创建一个子应用 opt注册子应用因为接下来的认证组件中需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员.admin运营站点的访问地址:http://127.0.0.1:8000/admin创建管理员以后,访问admin站点,先修改站点的语言配置。
2025-07-28 19:23:32
370
原创 3.DRF视图和路由
drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作。所以在django原有的django.views.View类基础上,drf封装了多个视图子类出来提供给我们使用。Django REST framwork 提供的视图的主要作用:创建一个子应用注册子引用:注册路由1.1 请求与响应内容协商:drf在django原有的基础上,新增了一个request对象继承到了APIVIew视图类,并在django原有的HttpResponse响应类的基础上实现了一个子类rest_framework.re
2025-07-28 19:22:46
828
原创 2.DRF 序列化器-Serializer
Django REST framework 中的 Serializer 使用类来定义,序列化器类必须直接或间接继承自 rest_framework.serializers.Serializer。Serializer有个子类叫:ModelSerializer创建一个子应用来 sers 来演示序列化器的使用注册子应用,并创建 urls 子路由文件,最后在总路由中注册子路由代码"sers", # 序列化器sers.urls,代码代码创建一个数据库模型类,代码"""学生信息"""
2025-07-28 19:19:33
1147
原创 1.DRF 环境安装与配置
Django REST framework 是一个建立在 Django 基础之上的 Web 应用开发框架,可以快速的开发 REST API 接口应用。在 REST framework 中,提供了序列化器 Serializer 的定义,可以帮助我们简化序列化与发序列化的过程,不仅如此,还提供了丰富的类视图、扩展类、视图集来简化视图编写工作。REST framework 还提供了认证、权限、限流、过滤、分页、接口文档等功能支持。核心思想:大量缩减编写 api 接口的代码。
2025-07-28 19:18:16
673
原创 Matplotlib 相关知识
Matplotlib 是Python 中著名的 2D 绘图库,它提供了一个面向对象的 API和一系列函数,用于将数据可视化。Matplotlib 采用三层架构设计,各层职责分明:主要后端类型如下:主要模块:顶级容器 ,相当于画布创建一个新的图形窗口或画布可以包含一个或多个 Axes(子图)控制图形大小、DPI、背景色等全局属性常用方法:3.2 坐标轴系统 - axes实际的绘图区域(子图)每个 Axes 包含 x 轴和 y 轴真正的绘图函数(如 plot())都是在 Axes 上调用的创建方
2025-07-26 02:05:32
412
原创 python 整合使用 Redis
有序集合,在集合的基础上,为每元素排序;元素的排序需要根据另外一个值进行比较,所以,对于有序集合,每一个元素有两个值,即:值和分数,分数专门用来做排序。对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。移除并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。移除并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。计算给定的一个或多个有序集合的交集并将结果集存储在新的有序集合 key 中。
2025-07-24 16:30:49
509
原创 Redis详解
目前市场主流数据存储都是使用关系型数据库。每次操作关系型数据库时都是I/O操作,I/O操作是主要影响程序执行性能原因之一,连接数据库关闭数据库都是消耗性能的过程。关系型数据库索引数据结构都是树状结构,当数据量特别大时,导致树深度比较深,当深度深时查询性能会大大降低。尽量减少对数据库的操作,能够明显的提升程序运行效率。
2025-07-24 16:28:58
961
原创 FastAPI中间件
中间件是一个函数,它的每个请求被特定的路径操作处理之前运行,同时也会在每个响应返回之前运行。中间件是包裹在应用程序周围的层,可以拦截所有传入的请求和传出的响应。中间件按添加的顺序执行(请求从外到内,响应从内到外)
2025-07-24 16:18:10
575
原创 FastAPI 中的依赖注入
FastAPI 中的依赖注入是一种强大的机制,能够增强代码的模块化和可维护性。通过高效地管理和注入依赖项,FastAPI 让开发人员能够创建更加有条理、可扩展且可测试的应用程序。
2025-07-24 16:16:10
878
原创 FastAPI 实现身份验证与授权
我们将创建用于生成和验证 JWT 的工具函数。SECRET_KEY替换为生产环境中安全且唯一的密钥。import jwt:接受数据并返回 JWT 令牌。:解码并验证令牌,如果有效则返回有效载荷。
2025-07-24 16:12:12
1246
1
原创 fastapi 传参以及参数校验
这段代码把路径参数 user_id,item_id 的值传递给路径函数的参数 user_id,item_id并使用 Path 对 user_id 和 item_id 的类型和值做了限制。
2025-07-24 16:09:31
629
原创 docker-compose 详解
Docker Compose 是一种用于定义和多容器 Docker 应用程序的工具。通过一个 docker-compose.yml 文件,可以配置应用程序需要的所有服务(例如:Web 服务器、数据库、缓存等)并轻松管理他们。
2025-07-22 20:20:08
2456
原创 Dockerfile 详解
我们来做一个案例:使用 Dockerfile 构建基于 ubuntu 22.04 的镜像,安装 Python3 并输出 “Hello, world”
2025-07-22 20:19:05
944
原创 Java并发9--线程池详解
/创建一个定长的线程池//创建一个单线程的线程池//创建一个可缓存支持灵活回收的线程池//创建一个支持周期执行任务的线程池在ThreadPoolExecutor类中有几个非常重要的方法:execute() & submit() & shutdown() & shutdownNow()
2025-07-19 23:03:44
1117
原创 Java并发8--并发安全容器详解
关于写时复制的容器,优势比较明显,其内部充分运用了读写分离的思想提升了容器的整体并发吞吐量,以及避免了并发修改抛出异常。内存占用问题。因为CopyOnWrite容器每次在发生修改时都会复制一个新的数组,所以当数组数据过大时对内存消耗比较高。数据不一致性问题。CopyOnWrite容器保证的是最终一致性,一条线程在执行修改操作,另一条线程在执行读取操作,读取的线程并不能看到最新的数据,就算修改操作执行了setArray()方法将指向改成了新数组,原本读取的线程也不能看到最新的数据。
2025-07-19 22:58:01
756
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅