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

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

怪不得会跑路
能跑就行的逻辑
Cookie 生成逻辑

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

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

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

最后
已经在重新写这一套玩意了,真的太哈人了

加钱,必须加钱

这就是传说中的防御性编程么🤣🤣🤣

接手价至少得是重写的 2 ~ 3 倍起跳😂

main1 main2 main3🤣

什么项目

一个软件的解析项目,爬虫系

倒很正常,就是新手写的

但这已经是商业项目,要赚钱的(

一般吧

你是没见过真烂的 python 代码,这些例子都算是上上等的模范代码了。那些代码可怕的程度超乎想象。每个接口的处理都是复制粘贴的一路到底,没有函数的概念。所有的变量基本都是全局的,包括类里面的也是到处直接读写。业务里用的所有内容都放一张表里,字段多的全用拼音首字母加数字,表的索引几十个。到处共享数据还丝毫没有锁的概念。

session 存 db 是正常操作,每次访问更新 session 的过期时间也是正常操作。你可以看看 spring session 的分布式 session 。不会 Python ,但是这种代码在 Java 里面应该还算正常。

挺简洁的,至少一眼就能看明白。不差了

我以为啥呢,基操。 年纪大了之后,现在再看这种程度的代码已经毫无波澜了。

唯一的问题也就就是 check_expire_time 好像是扫表吧,

fastapi+sqlmodel 挺前卫的啊

“#写一个接口,当这个接口接收到请求后 ...”很明显的面向 AI 编程,写个注释让 AI 帮忙写逻辑🤣

正常,商业代码这种情况多的很,能 RUN 就行(程序员或者代码)

萌新确实不建议摸二手代码,会崩世界观的。。。这可读性。。。看着挺好的,只有那个遍历 user 的方法即使看着注释也很迷惑。。。业务写多了手上没屎才是奇怪事,老板要能把维护项目谈成重写项目那属实是老板的能力可嘉,不过不一定会给你第二次机会。。。看 op 效率(加班情况)怎么样了。。。

这代码还成吧,这才哪到哪。除了代码结构问题,其他关于实现的吐槽都需要有实际瓶颈才有得说,现在这样未必不行,反到 op 有点偏执了。

你的代码还不够变态

应该没人接帮人改 bug 的活吧,重新做一套都比这省时省力,二开也是保证接手的代码能运行,然后尽量不动原来的代码。

这才到哪,我接手的前端项目,那煞笔二次封装 element-ui 连双向绑定都没有。全部参数和随机密码一样。到处是 arr1 ,arr2 互相循环修改数组,然后得出 obj1 ,obj2 。但文件组件 5000 行起。😭

见过更恶心的

cookie 和 token 有本质区别,token 也不是只有 jwt 。过期时间通过 get 扫表确实是问题,应该后台定时任务。见过几十层 if 的吗?缩进都换屏了。

不正常,如果是 jwt 存 redis 如果是 session 序列化文件和 db 有什么关系

点了,水平不够又喜欢二次封装,用起来头都大了。

这代码质量还算不错了,比我接手过的大部分代码强 10 倍。Cookie 存 DB 也是正常操作,小公司也不会有性能瓶颈,DB 打不死的。硬编码也看什么东西,API 请求地址之类的不太会更新的东西,写死也不影响可维护性。

spring session 的代码,很多人生产也是这样用的,哪里不正常了? github.com/spring-projects/spring-session/blob/main/spring-session-jdbc/src/main/java/org/springframework/session/jdbc/JdbcIndexedSessionRepository.java

等用户多写死了 就有活继续优化了呀

[又不是不能用,又不是不能跑]
大哥,你这系统有多少用户啊,就打穿数据库了

菜鸡我一概推荐 django ,而不是 flask 和 fastapi 这种 free form 的。其实 spring 也差不多 django 这个意思,给你框死死的,水平高低整出来的活都差不多。最怕就是 flask / fastapi 这种,新手写简直要了命

你这比我司运营了 10 几年的项目好多了,就说一点我们这项目技术栈横跨了 php ,java ,nodejs ,golang ,lambda ,每个技术栈都是在正在火的时候老板赶时髦要求加的,你就说牛不牛 b 吧

主打一个够用就好。俗称屎山代码。

存 db 正常啊,又不是人均百万并发,哈哈🤣

这注释不像是给人看的,像是给 AI 生成用的 prompt

我还见过更疯的。本来一个 DB 查询能搞定的事,硬写成 for 循环,一个个来查。关键最后发现查了还没什么用。找产品建议取消显示这个字段,注释掉 for 查询,速度一下就上去了。

其实我也想说 cookie 存数据库是基操,不是热门 toC 项目没那么容易打穿,也不用引入 redis 啥的

又不是不能用我就认识一个老板,先花钱从同行公司买一个版本代码(原版本也不咋地),招了一个全职 Java 开发做二开,工资 4000你猜 2 年之后这个代码变成什么样了?就这样,老板在业务稳定后,为了节约成本,把这 4k 的兄弟也开了,月 2000 块找了个兼职

深深赞同,最近接了个私活,一个小程序商城,后端是拿 dedecms 5.3 - 5.6 ,反正还没到 5.7 的版本 N 次开发的。那都不知道多少手了,我在里面看到了"送水"、"考试"、"广告联盟"、"商城"等 N 多的内容。前端传来的参数没有任何过滤,数据库操作类每个人一个封装一个,一个函数里可能调用了多个数据库操作类的方法,比如获取一条记录有的叫 get_one ,有的叫 getOne ,有的叫 first ,有的叫 find 。而这个公司拿着这个服务端的代码,号称完全自主开发,已经干了 14 年了。我真不知道怎么坚持下来的,就那参数不过滤,还做商城,没人干他们吗?我实在理解不了。脑袋都要大了,中途有 N 次想要退钱不干了,好在还是坚持下来了,又往屎山上拉了一泡。