自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【celery踩坑】Too many heartbeats missed

下面的问题,都来自同一个周期任务:每隔3分钟,统一命名为 per_three_task。

2024-04-11 14:47:46 153

原创 【swagger】DRF使用rest_framework_swagger

在 Django REST Framework(DRF)项目中,Swagger 是一个常用的工具,用于自动生成 API 文档并提供交互式界面,帮助开发人员更好地理解和测试 API。rest_framework_swagger 是一个与 DRF 集成的第三方库,它能够将 DRF API 自动转换为 Swagger 文档。

2024-02-29 18:10:45 432

原创 【celery踩坑】celery因为版本不同,导致broker报错

到容器中,直接打印celery的配置,broker_url是正确的,但是依然是会报这个错。

2024-02-06 23:58:09 451

原创 【python3.8 pre-commit报错】记录pre-commit install报错

在执行命令时,报错。

2024-02-01 14:21:34 463

原创 【性能优化】性能优化实战

在做code review的时候,经常会发现,因为开发习惯问题,很多研发人员喜欢在for循环中查询数据库。今天用一个真实例子,记录一次查询性能优化的例子。

2023-12-11 19:17:28 138

原创 【celery踩坑】celery定时和周期任务全部不执行

有一天,突然发现线上系统上的任务没有执行,状态一直是未完成。看了一下celery的beat日志,发现周期任务和定时任务都不执行了。重启项目,发现中,也只是执行前面几个周期或者定时任务,某个定时任务后面的所有任务都不执行了。

2023-11-30 14:37:19 1232

原创 【python开发踩坑】dict.fromkeys的坑

给mysql赋值,也会改变host的值。

2023-11-25 17:52:22 133

原创 【python开发踩坑】时间相减存在的逻辑漏洞

在一个Django项目中,有两个celery周期任务,都是每隔两分钟轮询一次。这两个任务,本质上是两个异步线程,而且都会操作数据库报告实例表的某条记录。一般情况下,通过判断超时时间,两个线程是不会同时操作同一条报告实例数据的,但是在客户的生产环境,出现了极端情况,同一条数据被两个线程同时修改了。线程线程。

2023-07-04 10:16:58 151

原创 lambda函数与字典结合,减少if条件判断

在巡检和基线场景中,要把巡检回来的值,和标准值进行对比,对比方式有很多,比如大于、小于、正则等,未来还要继续扩展。

2023-06-27 17:39:46 174

原创 django2项目-anyjson报错

有个项目,django版本是2.2.6,python从python2.7升级到python3.6。在安装依赖包时,会报错。

2023-06-21 17:12:52 367

原创 Ansible源码学习(一)

基于Ansible源码学习。

2023-06-17 14:01:49 328

原创 分布式队列celery学习

说明:本文内容来自《python自动化运维快速入门》学习Celery是由纯Python编写的,但协议可以用任何语言实现。目前,已有Ruby实现的RCelery、Node.js实现的node-celery及一个PHP客户端,语言互通也可以通过using webhooks实现。任务队列: 简单来说,任务队列就是存放着任务的队列,客户端将要执行任务的消息放入任务队列中,执行节点worker进程持续监视队列,如果有新的任务,就取出来执行该任务。这种机制就像生产者、消费者模型一样,客户端作为生产者,执行节点worke

2022-12-04 20:07:43 577 1

原创 celery4时区配置问题

现象:使用celery4时,出现数据库时间比中国时间少七个小时问题,出现有的周期任务不执行问题(比如每天10点执行的周期任务不响应)

2022-12-02 18:38:07 1459 1

转载 CentOS下Python3创建虚拟环境

此时的python默认已经是python3的版本了!CentOS下Python3如何创建虚拟环境。CentOS下Python3如何创建虚拟环境。CentOS下Python3如何创建虚拟环境。

2022-10-11 10:38:56 439

原创 进入docker环境调试django代码

有时候,由于各种限制,出包麻烦,但又需要频繁更改代码测试验证,而且又只能在真实的环境进行测试验证。此时如果能够进入docker环境,直接写代码调试,可以快速得到结果。

2022-10-10 19:59:18 381

原创 Django pycharm控制台日志模块报错和日志配置

在windows环境下,当日志文件大小超过配置设定的大小时,有时候会报错:文件另一个程序正在使用此文件,进程无法访问。

2022-10-09 14:32:23 1393

原创 celery apply_async定时任务重复执行问题

清晨起来,客户生产环境突然出现诡异的现象,定时早上7点执行一次的任务,在七点执行了七八次,非常诡异。而且经过排查,发现没有报错信息,最后是查看日志时,发现celery重发了很多同一时间的定时任务。

2022-09-02 15:31:28 1431

原创 vue本地代码 Module not found 问题

vue项目在windows系统能够成功build,但放到流水线打包时,直接报错。

2022-08-30 10:23:46 8335

原创 Python开发问题笔记

一、背景在开发过程中,往往会遇到很多bug,但有一些bug比较特别,容易重复出现,所以在此记录一下,防止重复踩坑。本帖子会持续更新,持续记录开发过程中遇到的问题二、问题详情1. if 判断相关原始代码:bk_cloud_id = ip_data.get("bk_cloud_id") if ip_data.get("bk_cloud_id") else \ ip_data["hostList"][0]["bk_cloud_id"]以上代码的本意是:当

2022-05-11 10:33:34 145

原创 Django-合并migrations

一、背景在开发一个迭代时,产生了很多migrations文件,而且这些migrations文件都是一个model表改来改去产生的,有必要将这个迭代的migrations文件在提测前合并成一个migrations文件。二、操作方法方法一:需要对已经初始化的库表做还原删除直接将本次迭代所产生的migrations文件删除执行命令python manage.py makemigrations生成一个新的migrations文件去数据库中,找到django_migrations表,删除步骤2对应的记录

2022-03-22 14:48:22 1728 1

原创 【性能优化】Django ORM使用Q查询时注意事项

一、背景介绍有两个查询条件差不多的函数,查询条件都是通过Q拼接而来,但是两者的查询时间差别很大。一个耗时1.044s(DEBUG (1.044))一个耗时0.040s(DEBUG (0.040))二、分析代码如下(脱密代码段)条件1: # 拼接查询条件 filter_list = Q(id=1) for key, time in demo_list: filter_list = filter_list | Q(xxx_key=key, xxx_time=ti

2022-01-24 12:07:47 1336

原创 【性能优化】减少操作数据,提高性能

一、背景在自测的时候,发现有个函数统计的数据很少,但是耗时比同类型复杂函数更多。然后用Django调试models输出的SQL语句,发现该函数在统计数据时,用了很多count()操作,产生了很多sql查询操作。二、分析考虑到代码安全,以下代码都是经过脱敏处理的。不过不影响我们的性能分析效果。优化前代码片段:def get_obj_static_data(bk_object_key, username="admin"): # 对象下,有权限的,并且已经巡检的实例 start = d

2022-01-21 12:01:22 878

转载 【DRF学习笔记】01-认识Web应用模式和RESTful风格

一、背景在学习DRF之前,是有必要了解DRF的演进过程的,明白为什么要用DRF,会有什么好处和坏处。所以,在学习DRF之前,有必要先了解Web应用模式和认识RESRful。二、Web应用模式(了解)在开发Web应用中,有两种应用模式:前后端不分离前后端分离1. 前后端不分离在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。这种应用模式比较适合纯网页应用,但是当后端对接App时,App可能并不需要

2022-01-12 18:58:54 161

原创 【性能优化】Django prefetch_related优化记录

一、现象描述1.表结构class Instance(BaseModel): check_object = models.ForeignKey(CheckObject, on_delete=models.CASCADE, db_constraint=False) xxxclass InstanceAttr(BaseModel): instance = models.ForeignKey(Instance, on_delete=models.CASCADE, db_constra

2022-01-11 16:20:02 543

原创 【性能优化】Django性能优化笔记

# 一、背景在研发过程中,随着数据量暴增,数据查询性能问题变的越来越突出,需要想办法优化查询响应速度。所以本篇文章,就是记录曾经做过的性能优化过程。二、优化场景记录场景一:优化交互逻辑,提高用户体验问题描述:客户通过多选下拉框的模块,查询主机。但是加载下拉框需要2分钟左右,主机展示table也很卡。原因是客户的模块有几千个,主机数据有几万条。而且这些数据都不是本地数据,都是需要调用开放性接口,分页去查询。原因分析:前端调用一个函数查询模块数据,实际后端这个函数的逻辑是循环分页调用第三方接

2022-01-09 22:51:48 1349

原创 Django Rest Framework学习说明

一、学习说明本专栏专门用于记录,在学习DRF过程中学到的知识点。好记性不如烂笔头,边学边记有利于以后复习。因为是学习,那专栏的内容很多都是有出处的,比如官方文档,B站老师视频文档等。所有引用到知识点,都会表明出处。二、主要引用史上最快DRF入门教程Django框架入门+实战快速上手...

2021-12-13 19:32:30 357

原创 drf-豁免特定请求的csrf验证

一、背景需求:最近在做前端微服务嵌入的时候,涉及到csrf验证问题。但是作为被引用的项目,因为安全问题,是不能将csrf完全放开的。只能针对特定的请求,豁免csrf验证。项目栈:Django 2.2.6djangorestframework 3.11.1vue二、实现1.前端部分前端要做的是,在header中加入一个自定义的参数,作为识别标志vue项目中用的是axios请求,详情入如下:axios.interceptors.request.use((config) =>

2021-09-24 17:39:48 440

原创 设计模式-观察者模式

一、背景多年前,用Java的时候,特意学过设计模式。但是随着时间的推移,发现设计模式在日常工作中,并没有很常用,渐渐地对设计模式的记忆变得模糊。最近参加技术小组学习,选的课题刚好是设计模式-观察者模式,特此记录学习成果,方便以后回忆。二、设计模式介绍什么是模式?建筑师Christopher Alexander给模式的定义是:每一个模式都描述了一个在我们周围不断发生的问题,以及该问题的解决方案的核心,这样,你就能够无数次地使用该解决方案而不用按照同样的方式重做一遍。简单地说,模式(patt

2021-09-18 14:56:57 76

原创 django多表合并查询并能分页

一、背景当前需求: 做一个小功能,要查询用户的所有订阅的信息,包括所订阅的应用和资源,而且要能分页查。数据库设计: 但是用户订阅数据是放在两张表中,应用订阅表和资源订阅表。单表可以分页查询,但多表分页查询之前是在java中,使用sql语句用过。在django中还没试过。解决方案:通过sql查询创建一个视图使用union方法对比了三个方案,union方案最简单,而且符合django项目设计,所以就选了union方法来实现这个小需求。之所以不选择方案一,是因为我们的项目中,基本不使用原生s

2021-09-11 12:01:30 1518

原创 django2 批量拼接查询条件

一、背景在做django项目性能优化时发现,orm查询数据库时,所需时间是很大的。如果在for循环里不停地查询数据库,性能消耗更是可怕,函数会变得更慢。但是,本次性能优化时,遇到一个特殊的情况,就是查询数据时,三个字段联合才能进行查询。这个时候,就不能直接三个字段都使用in,这样会出现错误。二、方案循环拼接查询条件,代码如下:health_inst_dict = dict(health_inst_polling.values_list("instance__bk_instance_key"

2021-08-05 17:34:39 593

原创 html页面生成图片-纯后端生成图片:pyecharts+snapshot-phantomjs

一、 html页面生成图片的技术背景将html页面生成图片,目前经过本人验证的,有两种方式:1、纯前端通过html2canvas生成图片,2、将前端的dom传回Django后端,通过wkhtmltoimage生成图片但是以上两种方式,都有一个前提,就是需要用户先打开页面(即页面必须先在前端渲染完成),然后要么是通过setimeout自动延迟生成图片,要么是用户通过点击按钮,触发生成图片的请求。二、发送图片邮件的需求需求:在后端,做一个定时任务,定时发送日报周报邮件,邮件的正文是图片。图片

2021-01-22 11:22:42 2962

原创 html页面生成图片-前端解决方案:vue+html2canvas

一、前言背景:最近有一个需求,要根据html页面,生成一个图片,并发送邮件。前端架构:vue+iview。技术选择:html2canvas 生成图片前提条件:npm i html2canvas二、代码实现编写toImage函数:创建一个htmltoimage.js文件,然后在main.js引入import html2canvas from 'html2canvas'import Vue from 'vue'const IMAGE = {}IMAGE.install = fu

2021-01-20 17:10:38 802

原创 html页面生成图片-django后端解决方案:django+vue+imgkit+wkhtmltoimage

一、背景背景:最近有一个需求,要根据html页面,生成一个图片,并发送邮件。后端架构:Python+Django。技术选择:imgkit+wkhtmltoimage组合生成图片前提条件:安装wkhtmltopdf二、代码实现首先是制作一个html模板文件:后端功能实现wkhtmltoimage的位置:在安装的wkhtmltopdf应用文件夹的bin文件夹下,wkhtmltopdf\bin\wkhtmltoimage.exeEXPORT_FILE:模板文件路径常量,EXPORT_

2021-01-20 16:58:34 546

原创 07-vue源码学习-vue的响应式原理(MVVM原理)

什么是MVVMMVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。要实现一个mvvm的库,我们首先要理解清楚其实现的整体思路。先看看下图的流程:1.实现compile,进行模板的编译,包括编译元素(指令)、编译文本等,达到初始化视图的目的,并且还需要绑定好更新函数;2.实现Observe,监听所有的数据,并对变化数据发布通知;3.实现watcher,作为一个中枢,接收到o

2020-12-10 16:21:45 217

转载 06-vue源码学习-理解依赖收集和派发更新(Observer、Watcher、Dep)

转载至:彻底理解Vue中的Watcher、Observer、Dep在数据响应化时,在getter方法中做依赖收集,在setter方法中做派发更新。dep用于存储依赖和派发更新。思考以下代码new Vue({ el: '#example', data(){ return{ obj:{ a:1 } } },})当我们写下这行代码时,vue将我们在data内定义的obj对象进行依赖追踪.具体做

2020-12-10 15:33:43 475

原创 05-vue源码学习-发布订阅模式

发布订阅模式目标: 解耦, 让各个模块之间没有紧密的联系现在的处理办法是 属性在更新的 时候 调用 mountComponent 方法.问题: mountComponent 更新的是什么??? (现在) 全部的页面 -> 当前虚拟 DOM 对应的页面 DOM在 Vue 中, 整个的更新是按照组件为单位进行 判断, 已节点为单位进行更新.如果代码中没有自定义组件, 那么在比较算法的时候, 我们会将全部的模板 对应的 虚拟 DOM 进行比较.如果代码中含有自定义组件, 那么在比较算法的时候,

2020-12-10 12:00:54 341

原创 04-vue源码学习-proxy

proxyProxy 对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。app._data.name// vue 设计, 不希望访问 _ 开头的数据// vue 中有一个潜规则:// - _ 开头的数据是私有数据// - $ 开头的是只读数据app.name// 将 对 _data.xxx 的访问 交给了 实例// 重点: 访问 app 的 xxx 就是在访问 app._data.xxx假设:var o1 = { name: '

2020-12-10 11:50:21 110

原创 03-vue源码学习-响应式原理(对象和数组)

一、响应式原理什么是响应式原理:意思就是在改变数据的时候,视图会跟着更新。实现响应式原理的核心:Object.definePropertyObject.defineProperty( 对象, '设置什么属性名', { writeable configurable enumerable: 控制属性是否可枚举, 是不是可以被 for-in 取出来 set() {} 赋值触发 get() {} 取值触发} )二、对象响应式化 <script>

2020-12-10 11:36:02 406

原创 02-vue源码学习-vue的基本执行流程和简单渲染模型

一、vue的基本执行流程获得模板: 模板中有 “坑”(比如{{}})利用 Vue 构造函数中所提供的数据来 “填坑”, 得到可以在页面中显示的 “标签了”将标签替换页面中原来有坑的标签总的来说:Vue利用我们提供的数据和 页面中模板生成了一个新的 HTML 标签 ( node 元素 ),替换到了页面中放置模板的位置.二、简单渲染模型Vue 本质上是使用 HTML 的字符串作为模板的, 将字符串的 模板 转换为 AST(抽象语法树), 再转换为 VNode(虚拟dom).模板 ->

2020-12-10 11:05:01 139

原创 01-vue源码学习-柯里化函数

一、概念:科里化: 一个函数原本有多个参数, 之传入一个参数, 生成一个新函数, 由新函数接收剩下的参数来运行得到结构.偏函数: 一个函数原本有多个参数, 之传入一部分参数, 生成一个新函数, 由新函数接收剩下的参数来运行得到结构.高阶函数: 一个函数参数是一个函数, 该函数对参数这个函数进行加工, 得到一个函数, 这个加工用的函数就是高阶函数.为什么要使用科里化? 为了提升性能. 使用科里化可以缓存一部分能力.二、代码实现vue源码中判断是否是html标签函数 let tags =

2020-12-10 10:21:37 502

空空如也

空空如也

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

TA关注的人

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