- 博客(108)
- 收藏
- 关注
原创 【django升级】django从2.2.6版本升级到3.2.25
因为漏洞问题,客户要求把django从2.2.6版本升级到3.2.25版本,在此记录此次升级遇到的问题。
2024-08-08 15:42:25
353
原创 【pycharm】 Virtualenv创建venv报错
在启动django项目时,需要创建venv环境,有时候能顺利创建成功,当python版本换成3.8时,会报错。
2024-07-05 14:56:12
301
原创 【celery踩坑】Too many heartbeats missed
下面的问题,都来自同一个周期任务:每隔3分钟,统一命名为 per_three_task。
2024-04-11 14:47:46
217
原创 【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
522
原创 【celery踩坑】celery因为版本不同,导致broker报错
到容器中,直接打印celery的配置,broker_url是正确的,但是依然是会报这个错。
2024-02-06 23:58:09
539
原创 【性能优化】性能优化实战
在做code review的时候,经常会发现,因为开发习惯问题,很多研发人员喜欢在for循环中查询数据库。今天用一个真实例子,记录一次查询性能优化的例子。
2023-12-11 19:17:28
153
原创 【celery踩坑】celery定时和周期任务全部不执行
有一天,突然发现线上系统上的任务没有执行,状态一直是未完成。看了一下celery的beat日志,发现周期任务和定时任务都不执行了。重启项目,发现中,也只是执行前面几个周期或者定时任务,某个定时任务后面的所有任务都不执行了。
2023-11-30 14:37:19
1649
原创 【python开发踩坑】时间相减存在的逻辑漏洞
在一个Django项目中,有两个celery周期任务,都是每隔两分钟轮询一次。这两个任务,本质上是两个异步线程,而且都会操作数据库报告实例表的某条记录。一般情况下,通过判断超时时间,两个线程是不会同时操作同一条报告实例数据的,但是在客户的生产环境,出现了极端情况,同一条数据被两个线程同时修改了。线程线程。
2023-07-04 10:16:58
181
原创 lambda函数与字典结合,减少if条件判断
在巡检和基线场景中,要把巡检回来的值,和标准值进行对比,对比方式有很多,比如大于、小于、正则等,未来还要继续扩展。
2023-06-27 17:39:46
210
原创 django2项目-anyjson报错
有个项目,django版本是2.2.6,python从python2.7升级到python3.6。在安装依赖包时,会报错。
2023-06-21 17:12:52
461
原创 分布式队列celery学习
说明:本文内容来自《python自动化运维快速入门》学习Celery是由纯Python编写的,但协议可以用任何语言实现。目前,已有Ruby实现的RCelery、Node.js实现的node-celery及一个PHP客户端,语言互通也可以通过using webhooks实现。任务队列: 简单来说,任务队列就是存放着任务的队列,客户端将要执行任务的消息放入任务队列中,执行节点worker进程持续监视队列,如果有新的任务,就取出来执行该任务。这种机制就像生产者、消费者模型一样,客户端作为生产者,执行节点worke
2022-12-04 20:07:43
614
1
原创 celery4时区配置问题
现象:使用celery4时,出现数据库时间比中国时间少七个小时问题,出现有的周期任务不执行问题(比如每天10点执行的周期任务不响应)
2022-12-02 18:38:07
1713
1
转载 CentOS下Python3创建虚拟环境
此时的python默认已经是python3的版本了!CentOS下Python3如何创建虚拟环境。CentOS下Python3如何创建虚拟环境。CentOS下Python3如何创建虚拟环境。
2022-10-11 10:38:56
454
原创 进入docker环境调试django代码
有时候,由于各种限制,出包麻烦,但又需要频繁更改代码测试验证,而且又只能在真实的环境进行测试验证。此时如果能够进入docker环境,直接写代码调试,可以快速得到结果。
2022-10-10 19:59:18
395
原创 Django pycharm控制台日志模块报错和日志配置
在windows环境下,当日志文件大小超过配置设定的大小时,有时候会报错:文件另一个程序正在使用此文件,进程无法访问。
2022-10-09 14:32:23
1521
原创 celery apply_async定时任务重复执行问题
清晨起来,客户生产环境突然出现诡异的现象,定时早上7点执行一次的任务,在七点执行了七八次,非常诡异。而且经过排查,发现没有报错信息,最后是查看日志时,发现celery重发了很多同一时间的定时任务。
2022-09-02 15:31:28
1510
原创 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
173
原创 Django-合并migrations
一、背景在开发一个迭代时,产生了很多migrations文件,而且这些migrations文件都是一个model表改来改去产生的,有必要将这个迭代的migrations文件在提测前合并成一个migrations文件。二、操作方法方法一:需要对已经初始化的库表做还原删除直接将本次迭代所产生的migrations文件删除执行命令python manage.py makemigrations生成一个新的migrations文件去数据库中,找到django_migrations表,删除步骤2对应的记录
2022-03-22 14:48:22
1822
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
1367
原创 【性能优化】减少操作数据,提高性能
一、背景在自测的时候,发现有个函数统计的数据很少,但是耗时比同类型复杂函数更多。然后用Django调试models输出的SQL语句,发现该函数在统计数据时,用了很多count()操作,产生了很多sql查询操作。二、分析考虑到代码安全,以下代码都是经过脱敏处理的。不过不影响我们的性能分析效果。优化前代码片段:def get_obj_static_data(bk_object_key, username="admin"): # 对象下,有权限的,并且已经巡检的实例 start = d
2022-01-21 12:01:22
893
转载 【DRF学习笔记】01-认识Web应用模式和RESTful风格
一、背景在学习DRF之前,是有必要了解DRF的演进过程的,明白为什么要用DRF,会有什么好处和坏处。所以,在学习DRF之前,有必要先了解Web应用模式和认识RESRful。二、Web应用模式(了解)在开发Web应用中,有两种应用模式:前后端不分离前后端分离1. 前后端不分离在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。这种应用模式比较适合纯网页应用,但是当后端对接App时,App可能并不需要
2022-01-12 18:58:54
191
原创 【性能优化】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
574
原创 【性能优化】Django性能优化笔记
# 一、背景在研发过程中,随着数据量暴增,数据查询性能问题变的越来越突出,需要想办法优化查询响应速度。所以本篇文章,就是记录曾经做过的性能优化过程。二、优化场景记录场景一:优化交互逻辑,提高用户体验问题描述:客户通过多选下拉框的模块,查询主机。但是加载下拉框需要2分钟左右,主机展示table也很卡。原因是客户的模块有几千个,主机数据有几万条。而且这些数据都不是本地数据,都是需要调用开放性接口,分页去查询。原因分析:前端调用一个函数查询模块数据,实际后端这个函数的逻辑是循环分页调用第三方接
2022-01-09 22:51:48
1415
原创 Django Rest Framework学习说明
一、学习说明本专栏专门用于记录,在学习DRF过程中学到的知识点。好记性不如烂笔头,边学边记有利于以后复习。因为是学习,那专栏的内容很多都是有出处的,比如官方文档,B站老师视频文档等。所有引用到知识点,都会表明出处。二、主要引用史上最快DRF入门教程Django框架入门+实战快速上手...
2021-12-13 19:32:30
376
原创 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
472
原创 设计模式-观察者模式
一、背景多年前,用Java的时候,特意学过设计模式。但是随着时间的推移,发现设计模式在日常工作中,并没有很常用,渐渐地对设计模式的记忆变得模糊。最近参加技术小组学习,选的课题刚好是设计模式-观察者模式,特此记录学习成果,方便以后回忆。二、设计模式介绍什么是模式?建筑师Christopher Alexander给模式的定义是:每一个模式都描述了一个在我们周围不断发生的问题,以及该问题的解决方案的核心,这样,你就能够无数次地使用该解决方案而不用按照同样的方式重做一遍。简单地说,模式(patt
2021-09-18 14:56:57
81
原创 django多表合并查询并能分页
一、背景当前需求: 做一个小功能,要查询用户的所有订阅的信息,包括所订阅的应用和资源,而且要能分页查。数据库设计: 但是用户订阅数据是放在两张表中,应用订阅表和资源订阅表。单表可以分页查询,但多表分页查询之前是在java中,使用sql语句用过。在django中还没试过。解决方案:通过sql查询创建一个视图使用union方法对比了三个方案,union方案最简单,而且符合django项目设计,所以就选了union方法来实现这个小需求。之所以不选择方案一,是因为我们的项目中,基本不使用原生s
2021-09-11 12:01:30
1596
原创 django2 批量拼接查询条件
一、背景在做django项目性能优化时发现,orm查询数据库时,所需时间是很大的。如果在for循环里不停地查询数据库,性能消耗更是可怕,函数会变得更慢。但是,本次性能优化时,遇到一个特殊的情况,就是查询数据时,三个字段联合才能进行查询。这个时候,就不能直接三个字段都使用in,这样会出现错误。二、方案循环拼接查询条件,代码如下:health_inst_dict = dict(health_inst_polling.values_list("instance__bk_instance_key"
2021-08-05 17:34:39
618
原创 html页面生成图片-纯后端生成图片:pyecharts+snapshot-phantomjs
一、 html页面生成图片的技术背景将html页面生成图片,目前经过本人验证的,有两种方式:1、纯前端通过html2canvas生成图片,2、将前端的dom传回Django后端,通过wkhtmltoimage生成图片但是以上两种方式,都有一个前提,就是需要用户先打开页面(即页面必须先在前端渲染完成),然后要么是通过setimeout自动延迟生成图片,要么是用户通过点击按钮,触发生成图片的请求。二、发送图片邮件的需求需求:在后端,做一个定时任务,定时发送日报周报邮件,邮件的正文是图片。图片
2021-01-22 11:22:42
3171
原创 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
845
原创 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
615
原创 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
228
转载 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
487
原创 05-vue源码学习-发布订阅模式
发布订阅模式目标: 解耦, 让各个模块之间没有紧密的联系现在的处理办法是 属性在更新的 时候 调用 mountComponent 方法.问题: mountComponent 更新的是什么??? (现在) 全部的页面 -> 当前虚拟 DOM 对应的页面 DOM在 Vue 中, 整个的更新是按照组件为单位进行 判断, 已节点为单位进行更新.如果代码中没有自定义组件, 那么在比较算法的时候, 我们会将全部的模板 对应的 虚拟 DOM 进行比较.如果代码中含有自定义组件, 那么在比较算法的时候,
2020-12-10 12:00:54
378
原创 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
124
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人