- 博客(368)
- 收藏
- 关注
原创 django源码分析 之 runserver运行背后的事
如命令python manage.py runserver 8000,则命令行参数列表为[‘manage.py’,‘runserver’, ‘8000’]420行,主要是解析子命令,如果子命令是help,则输出帮助信息等,否则启动runserver,连接数据库(436行)。392行关于自动重载,做了一些判断,主要是django的settings配置,日志配置,app注册是否正确。方式一的背后也是以方式二的形式执行的,两者等价。可以看到,这里是先做一个命令行参数的解析。点击调试按钮,打断点,可以看到。
2026-06-22 23:09:22
160
原创 HTTP 与 HTTPS 的区别:从原理到实战详解
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是万维网(WWW)数据通信的基础。无状态协议:每个请求都是独立的,服务器不会记住之前的请求。明文传输:数据在客户端和服务器之间以纯文本形式传输,不进行加密。默认端口:80HTTPS(HyperText Transfer Protocol Secure,超文本传输安全协议)是 HTTP 的安全版本。它在 HTTP 之下加入了安全层,通过SSL/TLS 协议。
2026-06-02 17:35:10
882
1
原创 力扣 之 198.打家劫舍
每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 2 + 9 + 1 = 12。
2026-05-22 16:36:48
122
原创 Flask中的URL ——url_for() 与 自定义动态路由过滤器
一、Flask 中的 url_for()url_for() 是 Flask 提供的一个非常强大的函数,它的作用是根据视图函数的名称(endpoint)反向生成对应的 URL。为什么推荐使用 url_for() 而不是直接硬编码 URL?解耦与维护方便:如果未来修改了路由规则(例如把 /user/ 改成 /profile/),你只需要修改路由定义,所有使用 url_for() 的地方会自动生成新路径,无需逐个查找替换。自动处理特殊字符:它会自动转义 URL 中的特殊字符和空格。绝对路径:生成的路径始
2026-05-13 09:58:58
462
原创 mysql的坑 - count计数
COUNT(表达式) 不会统计 “满足条件的行数”它只会统计:表达式结果不为 NULL 的行数。因为 id>10 成立 = 1,不成立 = 0,求和就是符合条件的数量。count(条件=真返回1,否则返回NULL) 才生效。结论:能传表达式,但结果 99% 不是你想要的!写法 1:用 IF 让不满足条件的返回 NULL。写法 2:用 CASE(最常用、最清晰)写法 4:放 WHERE 里(最简单)写法 3:直接用 SUM(最简单)不满足 → NULL(不计数)count(条件) 不生效。
2026-05-09 17:10:40
77
原创 深分页问题
limit 1000000, 10偏移量越大越慢,原理:MySQL 会先扫描前 1000010 行,丢弃前 1000000 行,只返回后 10 行,偏移越大,回表、排序、IO 开销爆炸。
2026-05-06 17:51:27
267
原创 mysql的坑 - 计算时间差值
当你写 max(test_date) - min(test_date) 时,MySQL 会尝试将日期转换为数字格式(通常是 YYYYMMDD 的整数形式)进行算术减法。只有在同一个月内(例如 2023-01-02 减 2023-01-01),这种算法碰巧能得到正确的数字 1,但一旦跨月或跨年,结果就会变得非常离谱。假设最小日期是 2023-01-30,最大日期是 2023-02-01。在 MySQL 中,计算两个日期之间的差值,必须使用专用的日期函数。真实的时间差:应该是 2天。
2026-05-06 17:22:15
69
原创 python的坑 - round四舍五入
即使你的数在内存中真的是完美的 4.625,Python 的 round() 函数(以及 Pandas 基于的 NumPy)默认采用的是“银行家舍入法”,也叫“四舍六入五成双”。虽然你打印出来看到的是 4.625,但在计算机内存中,它可能实际上存储的是一个略小于 4.625 的值,例如 4.624999999999999…如果你是在处理金额或财务数据,必须使用传统的“四舍五入”,请使用 Python 内置的 decimal 模块。规则:当数值恰好位于中间(即最后一位是 5)时,会舍入到最近的偶数。
2026-04-27 15:47:15
71
原创 VUE中,keep-alive组件与钩子函数的生命周期
动作没有(标准模式)有(缓存模式)首次进入created→mountedcreated→mounted→activated切换离开→destroyed(组件死亡)(组件休眠)再次进入created→mounted(重生,状态重置)activated(唤醒,状态保留)再次离开→destroyed最终销毁(已在第一次离开时销毁)→destroyed(当 keep-alive 移除或 exclude 时)activated❌ 从不触发✅ 每次激活都触发❌ 从不触发✅ 每次隐藏都触发。
2026-03-21 21:51:33
447
原创 mysql-关于distinct
比如 SELECT DISTINCT product_id, year, quantity, price → 只有当这 4 列的值完全相同时,才会被去重;若只是 product_id, year 相同,但 quantity 或 price 不同,DISTINCT 不会过滤。不加 DISTINCT 的结果(SELECT product_id, year, quantity, price)
2026-03-12 16:17:50
48
原创 mysql的坑 -- not in 与 null
因此:x NOT IN (a, b, c) 等价于 x!= a AND x!= b AND x!= c;若其中有一个值是 NULL,则 x!= NULL 的结果是 NULL(不是 true/false);只要逻辑表达式中有 NULL,整个表达式结果就是 NULL(判定为 false)。比如:3!= null → NULL , 3 not in (null,1,2) → NULL 条件不成立;3!= 1 AND 3!
2026-03-12 15:23:43
245
原创 docker拉取nginx镜像失败(m4/arm64架构)
访问http://localhost:8080 可以看到nginx的欢迎界面。执行docker pull nginx:latest的报错信息。执行以下指令拉取镜像。
2026-01-15 22:10:03
350
原创 python序列化-dumps的妙用
本文探讨了Python中json.dumps()处理嵌套对象序列化的方法。通过default参数指定转换函数(如lambda o: o.dict),可将不可序列化的对象转换为字典形式。这种设计体现了"将解释权交给调用方"的编程思想,类似于sorted()的key参数和filter()的设计模式,提供了灵活的数据处理方式。该方法有效解决了Python对象无法直接序列化的问题。
2025-12-08 14:54:39
288
原创 单页面和多页面的区别
本文对比了单页面和多页面应用的主要区别。单页面应用由静态文件(HTML、JS、CSS)组成,数据渲染在客户端完成;而多页面应用中HTML作为服务端模板,数据渲染在服务端进行。关键差异在于:单页面将业务逻辑集中在客户端,多页面则集中在服务端。这种架构差异直接影响应用的开发方式和性能特征。
2025-12-08 14:34:09
173
原创 如何查看正在执行的事务
摘要:在PyCharm调试时,执行带有行锁的SQL查询(如with_for_update())会导致后续对该行的update操作被阻塞。原因在于事务未提交时行锁未被释放。解决方法:1)等待事务提交自动释放锁;2)通过数据库系统表(PostgreSQL的pg_stat_activity或MySQL的innodb_trx)查看并终止阻塞的事务。该问题常见于调试期间事务未及时提交的场景。
2025-12-01 21:58:17
287
原创 Python函数式编程
本文介绍了Python函数式编程的核心概念和实践方法。主要内容包括:纯函数与不可变数据的使用,高阶函数(map/filter/reduce)的应用,lambda匿名函数的使用技巧,函数组合与柯里化的实现方式,以及用递归替代循环的编程范式。文章还展示了列表推导式、生成器表达式等Pythonic的写法,并介绍了itertools和functools模块中的实用工具。最后通过数据处理管道和配置合并的实际案例,演示了如何构建函数式风格的应用。这些方法能帮助开发者编写更简洁、可维护性更高的代码。
2025-11-29 18:10:27
396
原创 跨域的坑 - nginx配置项的always参数
摘要:跨域(CORS)是浏览器出于安全考虑限制不同源请求的机制。同源要求协议、域名和端口完全一致。跨域请求分为简单请求和预检请求两种类型。后端可通过配置CORS响应头解决跨域问题,如在Nginx中添加Access-Control-Allow-Origin等头部,或使用always参数确保错误响应也包含CORS头。生产环境建议明确指定可信源而非使用通配符。应用层也可通过中间件如django-cors-headers实现跨域支持。
2025-11-24 17:38:38
518
原创 flask之“应用上下文,请求上下文”
本文对比了Flask框架中的请求上下文和应用上下文。请求上下文存储请求相关数据,生命周期为一个请求周期,主要对象包括request和session;应用上下文存储应用相关数据,主要对象为current_app和g。两者都在请求进入时自动创建,存储在各自的栈结构中(_request_ctx_stack和_app_ctx_stack)。值得注意的是,当RequestContext入栈时若应用上下文栈为空,会自动将当前应用的AppContext对象入栈。这种设计实现了请求处理过程中对两种上下文的自动管理。
2025-11-24 16:58:30
263
原创 python之循环导入
当运行脚本app.py时,book模块会被第一次执行。当在book.py中,遇到from app import app后, app.py脚本会重新执行,但是book.py模块,不会第二次执行。(from book import book,这个导入语句,不会多次导入)比如,目录fisher中,有文件app.py, book.py。在python中,模块的导入遵循:同一模块,只会导入一次。
2025-11-16 21:12:48
206
原创 Pycharm中使用自带的数据库可视化工具
sqlalchemy的数据库链接格式为:postgresql://username:password@host:port/db_name。此处的URL格式为:jdbc:postgresql://host:port/db_name?
2025-10-21 20:15:04
391
原创 (psycopg2.DatabaseError) error with status PGRES_TUPLES_OK and no message from the libpq
在我的公司,我们有一个网络应用程序,可以监控投资公司的网站,以了解他们进行的任何新投资交易。宾果游戏,那一定是虫子!Celery 工作程序在分叉之前加载 Web 应用程序,因为它需要 Celery 对象,其中包含配置设置(例如消息代理主机、端口、导入任务的位置等)在我们的例子中,我们在导入时使用连接池初始化了 SQLAlchemy 引擎。最后,我们选择了解决方案 3,因为我们希望确保发动机被处理在每个前叉上,无论是在 Celery worker、Gunicorn worker 还是我们自己的前叉中。
2025-10-21 16:42:59
1129
原创 flask-sqlalchemy中的flush()
这是因为 flush() 的本质是 “同步本地操作到数据库”,但不提交事务——PostgreSQL 中,即使执行了 INSERT 语句,只要事务未提交,该语句产生的变更就属于 “事务私有数据”,仅当前事务可见,其他事务(无论何时开启)都无法访问。综上,db.session.flush() 是 “执行 SQL 但暂存事务” 的操作,核心价值是在不永久保存数据的前提下,同步本地操作到数据库并获取必要的反馈(如自增 ID)。PostgreSQL 默认的事务隔离级别是 Read Committed(读已提交)
2025-10-06 13:58:36
387
原创 sqlalchemy初始化时,报错TypeError: ‘NoneType‘ object is not iterable
engine_options[key].update(value)TypeError: ‘NoneType’ object is not iterable其实就是有多个__bind_key__,有一个没配置。补上就可以
2025-09-12 17:34:28
270
原创 CSS 选择器的优先级/层叠性
CSS 选择器的优先级(也称为层叠顺序或特异性)决定了当多个规则应用于同一个元素时,哪个规则会被最终应用。!内联样式ID类/属性/伪类元素/伪元素特异性值越高,优先级越高。相同优先级时,后出现的规则胜出(后来者居上)。继承的样式优先级最低。
2025-09-05 23:56:08
542
原创 前端开发vscode插件 - live server
在使用 Vue.js 进行开发时,通常不需要在每次修改代码后手动重新启动项目。Vue 提供了热更新(Hot Module Replacement, HMR)功能,可以在不重新加载整个页面的情况下,实时更新修改的部分代码,从而提高开发效率。在书写纯html页面时,如果想实现类似vue同样的效果(即代码改变,页面自动刷新,无需手动刷新页面)。可以使用插件live server。
2025-09-05 22:57:59
375
原创 Python之split - 常遇见的bug
设想,在某个应用场景下,你有一个变量product_ids,是产品id的字符串组合,形如"1,2,3,4"。你想获取到各个产品id的列表,于是你,print(product_id_list) # 输出['1', '2', '3']乍一看,这么写没毛病。但是,当product_ids=""时,有bug了。print(product_id_list) # 输出 [""]此时的输出为[""], 不符合预期。当product_ids="",我们期望product_ids.split(",")返回[]。
2025-09-03 18:19:31
329
原创 使用SQLALCHEMY的outerjoin时的bug
sqlalchemy.exc.InvalidRequestError: Don't know how to join to <class 'src.models.module_name.ModelName'>; please use an ON clause to more clearly establish the left side of this join
2025-08-15 11:01:01
416
原创 Flask中的路由尾随斜杠(/)
在浏览器地址栏输入http://127.0.0.1:5000/hello,按F12可以看到 重定向308的状态码。(如果在浏览器地址栏输入http://127.0.0.1:5000/hello/,则正常访问,不重定向)因此,flask背后其实是做了一个重定向,把/hello重定向到 /hello/如下,定义一个/hello/的路由。#TODO 待研究。
2025-07-13 21:51:50
374
原创 2024年遇到的最大的bug - 转义
这段代码的本意是 模糊查询url字段中包含‘\tencent.com\testDetail’的记录,实际不符合预期。在python中,可以使用r字符串前缀,表示不转义。原因:在Go字符串字面量中,反斜杠。会被解释为制表符而不是两个字符。
2025-02-10 21:08:09
221
原创 flask使用SQLAlchemy创建表失败
python console中没有报错,但是,使用数据库管理工具(如Navicat)查看数据库,发现没有出现新建的表。flask开发文档中,有这么一句话—— 自 Flask 0.11 版开始,推荐在 shell 中使用。解决方法一,如第一张图片中的注释代码所示,然后运行app.py脚本即可新建表。解决方法二,如下图:在终端中使用flask shell命令。原因未知,但是 解决方法找到两个,命令,它可以为你做许多自动化工作。
2023-05-11 23:18:33
931
1
原创 算法 - 异或操作(^)的妙用
分析:a ^ b ^ a = a ^ a ^ b (交换律) = (a ^ a) ^ b(结合律) = 0^b(结论2) = b。如a ^ b ^ c 等价于 a ^ c ^ b , 也等价于c ^ b ^ a 等(这里使用的是交换律)如a ^ b ^ c 等价于 (a ^ b) ^ ' 这里使用的是结合律。如a ^ b ^ b = a , a^ b ^ a = b。结论2. a ^ a = 0, a ^ 0 = a。结论3. 一个数与另一个数异或两次等于本身。结论1. 异或操作满足交换律和结合律。
2023-04-19 04:25:09
819
原创 IDEA常用快捷键
Ctrl + shift + / : 批量加入多行注释,再按一次就是取消。Ctrl + / : 批量加入单行注释,再按一次就是取消。Ctrl + alt + L : 格式化代码。Alt + shift + ↑ :上移当前行。Alt + shift + ↓ :下移当前行。psvm + 回车 :快速生成main方法。Alt + 1 : 打开\隐藏工程目录结构。Alt + enter : 代码修正提示。Alt + 4 :打开\隐藏控制台。Ctrl + D :向下复制一行。Ctrl + X :剪切当前行。
2023-02-04 16:22:04
1066
原创 JDK,JRE,JVM的作用及关系
是Java语言的软件开发工具包,内部包含了代码的编译工具和运行工具。2)编译代码的过程中,需要使用JDK中的翻译工具。3)运行代码的过程中,需要使用JDK中的运行工具。我们想要运行一个已有的Java程序,那么只需安装。我们想要开发一个全新的Java程序,那么必须安装。1)编写代码的过程中,需要使用JDK。4)代码需要运行在JVM当中。虚似机、以及核心类库(Java运行时环境,帮我们写好的程序)等。
2022-12-22 12:05:14
1144
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅