随笔分类 -  python

python学习的一些相关记录
摘要:## 背景 最近有一个业务场景需要用Python自行实现一个简单的LRU cache,不可避免的接触到了弱引用这一概念,这里记录一下。 ## 强引用 Python内存回收由垃圾回收器自动管理,当一个对象的引用计数归0时,其内存就可能被回收掉,而引用计数器的数值其实就是代表有多少个强引用指向该对象,我 阅读全文
posted @ 2023-07-23 23:57 及时 阅读(429) 评论(0) 推荐(0) 编辑
摘要:背景 最近有一个需求需要自定义一个多继承abc.ABC与django.contrib.admin.ModelAdmin两个父类的抽象子类,方便不同模块复用大部分代码,同时强制必须实现所有抽象方法,没想按想当然的写法实现多继承时,居然报错metaclass conflict: In [1]: impo 阅读全文
posted @ 2022-10-29 23:36 及时 阅读(4628) 评论(0) 推荐(1) 编辑
摘要:背景 最近尝试了解Django中ORM实现的原理,发现其用到了metaclass(元类)这一技术,进一步又涉及到Python class中有两个特殊内置方法__init__与__new__,决定先尝试探究一番两者的具体作用与区别。 PS: 本文中涉及的类均为Python3中默认的新式类,对应Pyth 阅读全文
posted @ 2022-09-25 23:15 及时 阅读(1051) 评论(0) 推荐(1) 编辑
摘要:问题背景 最近接入微信支付,微信官方并没有提供Python版的服务端SDK,因而只能根据文档手动实现一版,这里记录一下微信支付的整体流程、踩坑过程与最终具体实现。 微信支付APP下单流程 根据微信官方文档: https://pay.weixin.qq.com/wiki/doc/apiv3/open/ 阅读全文
posted @ 2022-03-31 00:23 及时 阅读(2423) 评论(1) 推荐(0) 编辑
摘要:问题背景 在Django后台的使用admin view绑定model后,可以很方便的通过网页对底层的数据表进行增删查改操作。 在实际工作中有一些数据字段会存储了json或者其他包含换行符、空格符的文本内容,这些文本内容在记录编辑详情页是能正常显示换行、空格的,如下: 但是在changelist页面则 阅读全文
posted @ 2022-01-03 17:59 及时 阅读(1191) 评论(0) 推荐(0) 编辑
摘要:问题背景 在后端服务中经常需要通过传入参数动态生成sql查询mysql,如查询用户信息、资产信息等,一条常见的sql如下: SELECT vip, coin FROM user_asset WHERE uid='u123456' 该条sql查询用户"u123456"的的vip身份与游戏币数量,其中具 阅读全文
posted @ 2021-11-21 23:49 及时 阅读(3236) 评论(0) 推荐(0) 编辑
摘要:最近碰到一个import外部文件全局变量修改后未符合预期效果的问题,简要描述如下: 有env.py, test.py, dal.py三个文件,env.py 中定义了DEBUG=False的全局变量,dal.py中部分代码会根据DEBUG取值决定是否走调试逻辑,在test.py中通过from env 阅读全文
posted @ 2021-08-30 23:32 及时 阅读(11163) 评论(1) 推荐(2) 编辑
摘要:最近的项目需要根据用户所属时区制定一些特定策略,学习、应用了若干python3的时区转换相关知识,这里整理一部分记录下来。 下面涉及的几个概念及知识点: GMT时间:Greenwich Mean Time, 格林尼治平均时间 UTC时间:Universal Time Coordinated 世界协调 阅读全文
posted @ 2021-08-01 23:02 及时 阅读(11076) 评论(2) 推荐(1) 编辑
摘要:背景 线上主api服务使用的是uWSGI+Django框架,循历史传承一直是通过svc守护进程运行,每次重启无外乎通过svc -k / svc -i 通知server实现重启,本质上就是通过向server发送SIGKILL/SIGINT信号实现结束旧进程,而后守护进程重新拉起新进程运行。 问题 此种 阅读全文
posted @ 2021-07-11 18:51 及时 阅读(2094) 评论(0) 推荐(2) 编辑
摘要:如下所示,看了网上的几种方法,这种方法算是代码量比较小的,同时可以保证求的是本地时区的0点时间戳,返回的是浮点数,需要的话自己转一下int In [1]: import time In [2]: from datetime import datetime In [3]: time.mktime(da 阅读全文
posted @ 2018-07-22 23:48 及时 阅读(4165) 评论(0) 推荐(0) 编辑
摘要:有两个表,一个是记录网站信息的site表,结构如下: 一个是记录用户信息的user表,结构如下: 如上面的表结构所示,user表中的site_id字段(简写为user.site_id)的取值其实仅限于site表中的id字段(简写为site.id)的取值,一种实现方式是在user.site_id和us 阅读全文
posted @ 2018-04-27 03:08 及时 阅读(1454) 评论(0) 推荐(1) 编辑
摘要:最近项目中遇到一个Python浅拷贝机制引起的bug,由于对于Python中对象引用、赋值、浅拷贝/深拷贝机制没有足够的认识,导致调试了很久才发现问题,这里简单记录一下相关概念。 在Python的设计哲学中,Python中的每一个东西都是对象,都有一个ob_refcnt变量,这个变量维护着对对象的引 阅读全文
posted @ 2018-03-29 02:03 及时 阅读(556) 评论(0) 推荐(0) 编辑
摘要:在文章 Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接(一) 中我们成功的为/feedback/feedback_stats/路径自定义了使用template语法的html文件,完成了通过相应链接跳转到自定义统计页面的功能,但是没能够在admin 阅读全文
posted @ 2018-01-21 20:38 及时 阅读(3963) 评论(0) 推荐(2) 编辑
摘要:Django的admin site结合ORM提供了非常强大的数据库操作功能,少量代码即可快速实现对数据库table数据进行展示、修改、保存的可视化页面和功能。 Django admin页面默认的展示是分多个app模块,每个app模块下面定义的数据库model会以表名作为超链接的形式展现出来,比如一个 阅读全文
posted @ 2018-01-21 20:31 及时 阅读(9474) 评论(0) 推荐(2) 编辑
摘要:调试Django框架写的服务时,需要模拟客户端发送POST请求,然而浏览器只能模拟简单的GET请求(将参数写在url内),网上搜索得到了HttpRequester这一firefox插件,完美的实现了模拟POST提交表单的需求,这里记录一下简单Django服务的搭建、以及使用HttpRequester 阅读全文
posted @ 2017-11-20 00:12 及时 阅读(8623) 评论(0) 推荐(0) 编辑
摘要:mongoengine支持程序同时连接多个数据库,这些数据库可以位于一个或多个mongo之中,通过alias名称区分不同的连接即可。 可以通过switch_db切换到不同的数据库,进行读写操作,switch_db其实是一个上下文管理器,通过和with语句一起使用,能够保证切换数据库的影响范围。 由于 阅读全文
posted @ 2017-11-14 00:52 及时 阅读(5727) 评论(0) 推荐(0) 编辑
摘要:背景 最近新上线的一个服务,偶尔会有超时告警,其主要逻辑仅仅只是简单的读/写mongodb,而且服务上线初期,流量并不大,因而理论上来说,每次请求都应该很快才对,事实上分析日志也证实90%以上的请求都在100ms内返回,大部分请求耗时都在10ms内,但是依然有1%不到的请求会显示耗时超过1s,极端个 阅读全文
posted @ 2017-11-05 18:27 及时 阅读(893) 评论(0) 推荐(0) 编辑
摘要:需要用Python写一段代码,给定一堆关键词,返回出现次数最多的n个关键字。 第一反应是采用一个dict,key存储关键词,value存储出现次数,如此一次遍历即可得出所有不同关键词的出现次数,而后排序取出前n个关键词即可。 然而仔细一思考,这种类似需求应该很常见,Python应该有提供更好的方式实 阅读全文
posted @ 2017-10-21 02:15 及时 阅读(5096) 评论(0) 推荐(0) 编辑
摘要:从mongodb中读取出来的记录中,时间存储在datetime对象里,返回给客户端的却要求是时间戳格式,因此需要将对应的datetime时间转化为时间戳,从stackoverflow上找到同样的问题和详尽的答案: https://stackoverflow.com/questions/8777753 阅读全文
posted @ 2017-09-21 01:47 及时 阅读(5363) 评论(1) 推荐(0) 编辑
摘要:项目中有可能会碰到这样一种场景: 根据一个id,查询得到和id对应的完整数据信息存储对象,比如书籍id到书籍详细信息,用户id到用户详细信息等,详细信息字段可能包括几十甚至上百个数据字段,真正需要返回给调用方的字段实际上却只占其中一小部分,这是出于性能和带宽的考虑(甚至在有些场景中,处于隐私或者安全 阅读全文
posted @ 2017-09-19 02:51 及时 阅读(507) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示