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