上周接手了个项目,老板说大部分项目都不能工作,本来是以维护的价格来处理接手这一段代码的
没想到坑比我想的还多,这是其中展示通用的一部分,大部分出于保密性就不能透露了

我滴妈欸,你说这是 Python 新手练手的代码我都信了,这是家公司的代码???
Interface 乱飞

怪不得会跑路
Cookie 生成逻辑

给 User 生成 Cookie 用的,不是 用 个 JWT 会要了命吗?这么写干嘛啊

而且最草的一点,Cookie 存在 MYSQL 数据库 里面
大哥,这人一多不得打穿数据库啊(

每个请求都要往数据库请求一次,妈欸
存心不给维护啊,写硬编码写了十几处




已经在重新写这一套玩意了,真的太哈人了
|  |      1jkjoke      2024-10-13 23:28:07 +08:00 加钱,必须加钱 | 
|  |      2Elaina      2024-10-13 23:31:32 +08:00 这就是传说中的防御性编程么🤣🤣🤣 | 
|  |      3106npo      2024-10-13 23:34:32 +08:00 via Android 接手价至少得是重写的 2 ~ 3 倍起跳😂 | 
|  |      4coolfan      2024-10-13 23:44:23 +08:00  2 main1 main2 main3🤣 | 
|      5JoeDH      2024-10-13 23:46:44 +08:00 什么项目 | 
|  |      6MoeMagicMango OP @JoeDH 一个软件的解析项目,爬虫系 | 
|      7vasto      2024-10-13 23:57:07 +08:00 倒很正常,就是新手写的 | 
|  |      8MoeMagicMango OP @vasto 但这已经是商业项目,要赚钱的( | 
|  |      9GG668v26Fd55CP5W      2024-10-14 00:03:24 +08:00 via iPhone 一般吧 | 
|  |      10geligaoli      2024-10-14 00:09:56 +08:00 你是没见过真烂的 python 代码,这些例子都算是上上等的模范代码了。那些代码可怕的程度超乎想象。每个接口的处理都是复制粘贴的一路到底,没有函数的概念。所有的变量基本都是全局的,包括类里面的也是到处直接读写。业务里用的所有内容都放一张表里,字段多的全用拼音首字母加数字,表的索引几十个。到处共享数据还丝毫没有锁的概念。 | 
|      11zhenjiachen      2024-10-14 00:20:24 +08:00 via iPhone session 存 db 是正常操作,每次访问更新 session 的过期时间也是正常操作。你可以看看 spring session 的分布式 session 。不会 Python ,但是这种代码在 Java 里面应该还算正常。 | 
|  |      12Maboroshii      2024-10-14 00:22:55 +08:00 via Android  1 挺简洁的,至少一眼就能看明白。不差了 | 
|  |      13Reficul      2024-10-14 00:34:21 +08:00  1 我以为啥呢,基操。  年纪大了之后,现在再看这种程度的代码已经毫无波澜了。 | 
|      14chenqh      2024-10-14 00:55:03 +08:00 唯一的问题也就就是 check_expire_time 好像是扫表吧, | 
|  |      15maocat      2024-10-14 01:05:12 +08:00 via iPhone fastapi+sqlmodel 挺前卫的啊 | 
|  |      16xiri      2024-10-14 01:08:18 +08:00  9 “#写一个接口,当这个接口接收到请求后 ...” 很明显的面向 AI 编程,写个注释让 AI 帮忙写逻辑🤣 | 
|      17aycclm      2024-10-14 01:19:03 +08:00 正常,商业代码这种情况多的很,能 RUN 就行(程序员或者代码) | 
|      18ntedshen      2024-10-14 02:52:40 +08:00 萌新确实不建议摸二手代码,会崩世界观的。。。 这可读性。。。看着挺好的,只有那个遍历 user 的方法即使看着注释也很迷惑。。。 业务写多了手上没屎才是奇怪事,老板要能把维护项目谈成重写项目那属实是老板的能力可嘉,不过不一定会给你第二次机会。。。 看 op 效率(加班情况)怎么样了。。。 | 
|  |      19IvanLi127      2024-10-14 03:12:41 +08:00  13 这代码还成吧,这才哪到哪。除了代码结构问题,其他关于实现的吐槽都需要有实际瓶颈才有得说,现在这样未必不行,反到 op 有点偏执了。 | 
|  |      20IzayakI      2024-10-14 04:00:31 +08:00 你的代码还不够变态 | 
|      21zerovoid      2024-10-14 06:57:31 +08:00 via Android 应该没人接帮人改 bug 的活吧,重新做一套都比这省时省力,二开也是保证接手的代码能运行,然后尽量不动原来的代码。 | 
|  |      22bgm004      2024-10-14 07:45:37 +08:00 via Android  2 这才到哪,我接手的前端项目,那煞笔二次封装 element-ui 连双向绑定都没有。全部参数和随机密码一样。 到处是 arr1 ,arr2 互相循环修改数组,然后得出 obj1 ,obj2 。但文件组件 5000 行起。😭 | 
|  |      23guanhui07      2024-10-14 07:54:37 +08:00 via iPhone 见过更恶心的 | 
|      24lcbp      2024-10-14 08:06:20 +08:00  1 cookie 和 token 有本质区别,token 也不是只有 jwt 。 过期时间通过 get 扫表确实是问题,应该后台定时任务。 见过几十层 if 的吗?缩进都换屏了。 | 
|      25Bingchunmoli      2024-10-14 08:08:52 +08:00 via Android @zhenjiachen 不正常,如果是 jwt 存 redis 如果是 session 序列化文件和 db 有什么关系 | 
|  |      27sagaxu      2024-10-14 08:16:47 +08:00 这代码质量还算不错了,比我接手过的大部分代码强 10 倍。 Cookie 存 DB 也是正常操作,小公司也不会有性能瓶颈,DB 打不死的。硬编码也看什么东西,API 请求地址之类的不太会更新的东西,写死也不影响可维护性。 | 
|      28zhenjiachen      2024-10-14 08:17:19 +08:00 via iPhone @lcbp spring session 的代码,很多人生产也是这样用的,哪里不正常了? https://github.com/spring-projects/spring-session/blob/main/spring-session-jdbc/src/main/java/org/springframework/session/jdbc/JdbcIndexedSessionRepository.java | 
|  |      290xD800      2024-10-14 08:18:58 +08:00 等用户多写死了 就有活继续优化了呀 | 
|  |      30BeijingBaby      2024-10-14 08:21:31 +08:00  [又不是不能用,又不是不能跑]  | 
|  |      31967182      2024-10-14 08:27:35 +08:00 大哥,你这系统有多少用户啊,就打穿数据库了 | 
|      32dayeye2006199      2024-10-14 08:31:10 +08:00 菜鸡我一概推荐 django ,而不是 flask 和 fastapi 这种 free form 的。 其实 spring 也差不多 django 这个意思,给你框死死的,水平高低整出来的活都差不多。 最怕就是 flask / fastapi 这种,新手写简直要了命 | 
|  |      33k9982874      2024-10-14 08:36:25 +08:00 via Android 你这比我司运营了 10 几年的项目好多了,就说一点我们这项目技术栈横跨了 php ,java ,nodejs ,golang ,lambda ,每个技术栈都是在正在火的时候老板赶时髦要求加的,你就说牛不牛 b 吧 | 
|      34sn0wdr1am      2024-10-14 08:37:20 +08:00 主打一个够用就好。 俗称屎山代码。 | 
|  |      35anakinsky      2024-10-14 08:40:38 +08:00 存 db 正常啊,又不是人均百万并发,哈哈🤣 | 
|  |      36zydxn      2024-10-14 08:44:15 +08:00 这注释不像是给人看的,像是给 AI 生成用的 prompt | 
|  |      37wupher      2024-10-14 08:45:10 +08:00 我还见过更疯的。 本来一个 DB 查询能搞定的事,硬写成 for 循环,一个个来查。 关键最后发现查了还没什么用。找产品建议取消显示这个字段,注释掉 for 查询,速度一下就上去了。 | 
|      38aarontian      2024-10-14 08:46:40 +08:00 其实我也想说 cookie 存数据库是基操,不是热门 toC 项目没那么容易打穿,也不用引入 redis 啥的 | 
|      39v2orz      2024-10-14 08:49:12 +08:00 又不是不能用 我就认识一个老板,先花钱从同行公司买一个版本代码(原版本也不咋地),招了一个全职 Java 开发做二开,工资 4000 你猜 2 年之后这个代码变成什么样了? 就这样,老板在业务稳定后,为了节约成本,把这 4k 的兄弟也开了,月 2000 块找了个兼职 | 
|  |      40vkZudze5p1h4py5H      2024-10-14 08:52:07 +08:00 深深赞同,最近接了个私活,一个小程序商城,后端是拿 dedecms 5.3 - 5.6 ,反正还没到 5.7 的版本 N 次开发的。 那都不知道多少手了,我在里面看到了"送水"、"考试"、"广告联盟"、"商城"等 N 多的内容。前端传来的参数没有任何过滤,数据库操作类每个人一个封装一个,一个函数里可能调用了多个数据库操作类的方法,比如获取一条记录有的叫 get_one ,有的叫 getOne ,有的叫 first ,有的叫 find 。而这个公司拿着这个服务端的代码,号称完全自主开发,已经干了 14 年了。 我真不知道怎么坚持下来的,就那参数不过滤,还做商城,没人干他们吗?我实在理解不了。脑袋都要大了,中途有 N 次想要退钱不干了,好在还是坚持下来了,又往屎山上拉了一泡。 | 
|  |      41user100saysth      2024-10-14 08:57:01 +08:00 草台班子,整个世界都是 | 
|  |      43Tink PRO 老板在找几个人都搞不了,最后还得找原开发 | 
|  |      44Lightbright      2024-10-14 09:03:39 +08:00 via Android 挂我是吧,晚上别睡太死 | 
|  |      45cccvno1      2024-10-14 09:03:43 +08:00 可能屎见多了,看这么短的代码甚至有点眉清目秀😂 | 
|      46cndenis      2024-10-14 09:03:44 +08:00 你能轻松看懂说明这代码已经是及格以上的水平了, 可以了. 而且你说这是爬虫, 那代码就是针对性的, 没有复用可能, 硬编码完全没问题. 你不会觉得一个爬微博的虫只要改个域名就能爬抖音吧, 如果不能改的话, 写死微博的域名有啥问题 | 
|  |      47llsquaer      2024-10-14 09:03:45 +08:00 觉得还行啊,楼主看能发个修改过的对比下,学习学习 | 
|      48wangxiaoer      2024-10-14 09:04:52 +08:00 via iPhone 看起来的确挺烂。但是 session 存数据库这个不算问题,多台服务器不用考虑负载均衡的模式。 | 
|  |      49imnpc      2024-10-14 09:08:10 +08:00 代码没问题的 这个估计也是找人做的急活 功能都实现了 而且做的爬虫的话  根本不会有大规模用户   什么样的需求 给的什么样的报价 写什么样的代码 | 
|  |      50woodfizky      2024-10-14 09:16:11 +08:00 已经不算很差了,不过确实项目结构还不成形。 起码这个 BaseModel 应该是 pydantic 的 BaseModel 吧,起码知道用显式定义属性的类。 我知道的个别同事都是字典用到天昏地暗。 一个字典几十个键值对,还有嵌套的,不管大部分属性能不能用到,反正就从头用到尾,好几层调用方法都要把这个祖传字典传进去,修改里面的值。 还有所有业务,涉及到数据库的,也不知道怎么配置 ORM 的,反正就一条语句一个事务。 接手的那个同事,接手了几个月,改 bug+优化+改造,头发都白了几百根。 | 
|      51zgsi      2024-10-14 09:16:59 +08:00 | 
|  |      52rlds      2024-10-14 09:17:29 +08:00 看了这代码,比我们那些项目好多了。。 | 
|  |      53ugpu      2024-10-14 09:18:02 +08:00 代码没问题. 挺规范的. 又不是什么大工程 临时爬虫项目而已 以后要改得地方多着呢 这不 OP 就改了吗?. 看项目就几个文件几个代码 我内心已经对这些毫无波澜 | 
|  |      54ma46      2024-10-14 09:18:38 +08:00 如果你觉得这就是屎山, 那你是没见过真正的屎山 | 
|      55CodeCodeStudy      2024-10-14 09:20:37 +08:00 还好吧,不算太烂 | 
|  |      56superchijinpeng      2024-10-14 09:22:14 +08:00 代码没啥问题,简洁明了 | 
|  |      57harryWebb      2024-10-14 09:23:32 +08:00 你这个得加钱,你还要重新写,也许这代码运行一段时间公司倒闭了就没了 也很正常 你没遇到过当年我遇到 php 得代码,和 html 混写,啥都混一起,那个是真的雷人 | 
|  |      58gimp      2024-10-14 09:24:24 +08:00 | 
|  |      59HywelXu      2024-10-14 09:25:00 +08:00 | 
|  |      60haneki      2024-10-14 09:28:43 +08:00 代码和人有一个能跑就行。 | 
|  |      61HashV2      2024-10-14 09:29:19 +08:00 @geligaoli 是的  这个已经算好的了,起码能知道是干什么的,我现在接手的无注释、一个方法几百行的代码才是炸裂,我准备梳理完逻辑直接重构了,真改不了一点。 | 
|  |      62wowawesome      2024-10-14 09:30:32 +08:00 属于能跑就行 | 
|  |      63cxe2v      2024-10-14 09:31:05 +08:00 1. 这个代码帮老板挣到钱了吗? 2. 你写的优雅代码能帮老板挣到更多利润吗? | 
|  |      64XLeopard      2024-10-14 09:33:56 +08:00 看着这种代码就控制不住的想骂 | 
|  |      65BlackSiao      2024-10-14 09:34:05 +08:00 @Maboroshii 还真是,我不是科班出身的,大学的时候写的代码和这个比也差不多了 | 
|      66charlie21      2024-10-14 09:38:35 +08:00 3. 老板挣钱给你买法拉利了吗? | 
|      67991547436      2024-10-14 09:44:32 +08:00 ai 写的 | 
|  |      68Latin      2024-10-14 09:54:02 +08:00 能跑就行 另外这个代码算很整洁了 | 
|  |      69raphaelsoul      2024-10-14 09:54:57 +08:00 其实还好 这都算中规中矩的了 | 
|      70xcai007      2024-10-14 09:55:14 +08:00 也有可能是公司的问题。。。 | 
|  |      71NO9527      2024-10-14 09:59:11 +08:00 每天访问量个位数的话,存 db 也就这样了 | 
|      72lwlizhe      2024-10-14 10:00:00 +08:00 竟然还给你写注释,良心啊~~🐶 | 
|      73Xi      2024-10-14 10:00:09 +08:00 这是人情世故代码,考验老板,也恶心下一位接手的人。 就算你花大精力重构了代码,要是之后项目再次不能工作,老板很大可能会觉得你的水平和之前的差不多,这就是所谓的吃力不讨好。 | 
|  |      74Felldeadbird      2024-10-14 10:02:07 +08:00 问题不大,能跑就好了。 钱给够,多屎我都可以在上面雕花。 | 
|  |      75yh7gdiaYW      2024-10-14 10:04:05 +08:00 看起来除了 main1 2 3 4 有点难绷外,其他的还不错了,他甚至还写了注释 | 
|      76querysecret      2024-10-14 10:04:12 +08:00 不是啥大事,up 应该工作 5 年内,哈哈,大于这个数应该见怪不怪了 | 
|      77cbythe434      2024-10-14 10:05:15 +08:00 main2 main3 main4....main7 ,main 届 goat | 
|  |      78300      2024-10-14 10:05:24 +08:00 这个好歹有板有眼,知道是干嘛的 以前重构某日企车厂 app 的三手代码。页面接收一堆参数,最后应该显示两个按钮,结果一通处理显示了 4 个,他们的处理方法就是直接加 size = 2 。反正 mock server 的数据是固定的。几十个页面全部都是这种写法,有什么 if else 还是 when 条件的,最后强行设置结果就行了。 从代码看一手的时候是有真正逻辑的,二手的时候可能是修 bug 或者改设计,直接就真正的放飞自我了 | 
|  |      79utre938722      2024-10-14 10:09:31 +08:00 现在写代码 本着能用就行了 | 
|  |      80ColdBird      2024-10-14 10:16:36 +08:00 看的我都笑死了,真是绷不住了。 我对垃圾代码是真的零容忍,但是很多人都是抱着又不是不能跑的心态写代码的,没啥办法 | 
|  |      81GBdG6clg2Jy17ua5      2024-10-14 10:23:10 +08:00  1 我觉得写得挺好的呀。 1.你看他是爬虫的,为啥有那么多 main ,因为每次爬虫变了,就复制粘贴一个新的。这种方法简单快捷,后来者还能清晰看到历次的变化。 2.简单几个文件就实现了老板的功能,肯定实现得很快,老板看到漏出欣慰的笑容。 3.经过几手了,还在他的基础上变更,证明确实好用。 总得来说,结构清晰,还有注释,这代码我得给 90 分。 | 
|  |      82www12222      2024-10-14 10:27:05 +08:00 防御型编程,小公司就得这么写,写下去位置越来越稳 | 
|  |      83ieliwb      2024-10-14 10:29:49 +08:00 代码写的好能当饭吃吗🙄 | 
|  |      84drwebco      2024-10-14 10:31:16 +08:00 没必要喷, 1.你是使用 jwt 包,人家这叫自己实现 session ,你为何认为使用别人的轮子就比自己实现产生了优越感?自己实现的性能比不上开源轮子也情有可原。 2.还有 jwt 有弊端,它是无状态的,服务端无法控制它掉线,也许他想使用这种 sission 状态能从服务端控制,也需你会说,为啥不用 redis ,或放在内存? 咋了,内存不是系统开销啊? 3.你说的每次调用都要查询一次数据库,怎么你每次打开一个页面,不都去查询一次数据库的么,顺带就把 cookie 给查了,至少不额外占用连接数据库和销毁的开销,系统额外开销也不会多大。 | 
|      86lmshl      2024-10-14 10:36:47 +08:00 这代码写的挺不错的啊,没看出来哪里有问题 | 
|  |      87cominghome      2024-10-14 10:43:41 +08:00 看着像是有一定基础的程序员跨语言写的 | 
|  |      88leeyuzhe      2024-10-14 10:43:53 +08:00 这才哪到哪?可读性都挺好的 | 
|      89Whitroom      2024-10-14 10:44:30 +08:00 还得是 fastapi + sqlmodel ,用框架提高了烂代码的可读性😂 | 
|  |      90qW7bo2FbzbC0      2024-10-14 10:46:39 +08:00 二次接手的代码就像被修了两次的电子产品,多次转院的病人一样 | 
|  |      9175S3CWXNN0VQ84mg      2024-10-14 10:48:04 +08:00 正常,要对此保有平常心。而且能不动就不要动。 | 
|      92chenqh      2024-10-14 11:00:17 +08:00 只要不是高分发,cookie 都可以存 db 的吧.至少数据库有界面,有什么问题,好查许多 | 
|  |      93scys      2024-10-14 11:11:44 +08:00 整个代码我硬是看不出‘大’问题。看价钱,维护就维护的态度。如果只是让这个代码跑起来,不负责其他,不难。 | 
|  |      94gesse      2024-10-14 11:14:24 +08:00 能说这种代码是烂代码的,可能入行没多久,或者是常年在大厂流水线打螺丝 😄 | 
|      95wangjiang      2024-10-14 11:15:49 +08:00 这个代码,我感觉还行 | 
|  |      96Marszm      2024-10-14 11:18:37 +08:00 这就是 AI ,gpt 。。。牢美最好以后都拿这玩意开发系统。 | 
|  |      97masterclock      2024-10-14 11:19:17 +08:00 看起来没啥大问题,似乎只是一个小项目,随便写写凑合一下 | 
|  |      98janpun      2024-10-14 11:23:14 +08:00 从不接手二手代码,因为耗费的精力是新开发的几倍,客户不会理解的 | 
|  |      99vkZudze5p1h4py5H      2024-10-14 11:25:18 +08:00 @seedhk 我是之前的同事介绍的,我跟你说我都怀疑是这个同事嫌烦推给我的。 | 
|  |      100Building      2024-10-14 11:29:48 +08:00 via iPhone 感觉挺清晰明了的,有没有可能你自以为优化了半天下一任一接手也觉得你写的是垃圾呢 |