代码人生:从外包Java狗到甲方Python初体验,我用Django搭了第一个网站

架构还没想好
2025-12-24 17:39
阅读 2296

去年十月的一个深夜,深圳南山科技园的写字楼还亮着零星几盏灯。我揉了揉酸胀的眼睛,盯着屏幕上那堆永远修不完的Spring Boot接口文档,心里一阵烦躁。窗外是深南大道上川流不息的车灯,而我,一个干了三年外包的Java开发,月薪15k,房租3500,住在白石洲握手楼里,每天加班到十点,却连个正式工牌都没有。

“兄弟,你这项目做完就撤了吧,甲方那边又要砍预算。”项目经理老张拍了拍我的肩膀,语气里带着点无奈。那一刻,我真的有点想放弃——不是放弃coding,而是放弃这种看不到尽头的外包生涯。

但转机来得比想象中快。就在上个月,我终于拿到了一家本地电商公司的offer,正式岗,月薪22k,五险一金齐全,最关键的是——不用再穿外包马甲进园区了。入职那天,我站在公司楼下仰头看了好久那栋玻璃幕墙大楼,心里默念:“老子终于上岸了。”


甲方的日子没那么轻松,但有了“学习”的奢侈

进了甲方才发现,日子也没那么好过。虽然不用再被客户当孙子使唤,但内部系统多如牛毛,技术栈也五花八门。上周五晚上,产品经理小林突然在钉钉群里@我:“老李,咱们后台有个简单的数据展示页面,下周上线,你能不能搞一下?”

我点开需求文档一看,心里咯噔一下:要展示用户行为日志、支持按时间筛选、还要导出Excel……典型的CRUD操作。如果是以前在外包,我肯定直接上Spring Boot + MyBatis + Thymeleaf一套组合拳。但这次,同事阿哲轻描淡写地说了一句:“这个用Django做最快,半小时搞定。”

Django?我愣住了。作为正统Java出身,我连Python都没怎么碰过。大学时学过一点,后来全扔给JVM了。但看着其他同事熟练地敲着python manage.py runserver,我心里有点发虚——难道在甲方,我还得从零开始?

那天晚上回到家,老婆看我愁眉苦脸,问我怎么了。我说:“可能要学Python了。”她笑着把一盘西瓜推过来:“怕啥,你当年不是说‘代码人生,就是不断打怪升级’吗?”

对啊,代码人生,不就是一次次从舒适区跳出来,再重新站稳脚跟吗?


从“Hello World”到Django,我踩过的坑

周六一早,我就窝在出租屋里,打开了VS Code(是的,甲方居然允许用VS Code,而不是强制IDEA!)。先装Python 3.10,再pip install django==4.2,一切看起来都很顺利。

但问题很快来了。

第一个坑:虚拟环境不会建
我直接全局装了Django,结果第二天跑项目的时候各种依赖冲突。阿哲看到后笑着说:“兄弟,Python讲究‘隔离’,就像我们程序员也要学会和外包心态隔离一样。”他教我用python -m venv myenv创建虚拟环境,那一刻我恍然大悟——原来不只是代码需要干净的环境,人也需要。

第二个坑:MVC?不,是MTV!
习惯了Spring的Controller-Service-DAO三层架构,看到Django的Model-Template-View结构时我一度混乱。“Template不是前端模板吗?怎么和View混在一起?”我嘀咕着。后来才明白,Django的View其实是逻辑层,Template才是纯HTML。这种设计反而更贴近Web本质——毕竟,我们做的是网站,不是微服务。

第三个坑:ORM的魔法让我又爱又恨
写Model时,我习惯性地想手写SQL。但Django的ORM太香了:

# models.py
class UserLog(models.Model):
    user_id = models.IntegerField()
    action = models.CharField(max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)

然后一行UserLog.objects.filter(created_at__gte=last_week)就搞定查询。不用写DAO,不用配MyBatis映射,甚至迁移数据库只要两行命令:

python manage.py makemigrations
python manage.py migrate

那一刻我差点哭出来——原来Python真的能“少写代码,多睡觉”。


搭建第一个网站:从焦虑到成就感爆棚

周日晚上,我终于把那个数据展示页面跑起来了。

过程其实很简单:

  1. 创建项目:django-admin startproject logsite
  2. 创建App:python manage.py startapp logs
  3. 定义Model(如上)
  4. 写View:
# views.py
from django.shortcuts import render
from .models import UserLog
from datetime import datetime, timedelta

def log_list(request):
    last_week = datetime.now() - timedelta(days=7)
    logs = UserLog.objects.filter(created_at__gte=last_week).order_by('-created_at')
    return render(request, 'logs/list.html', {'logs': logs})
  1. 配置URL路由
  2. 写个简单的HTML模板(用Bootstrap快速搭了个表格)

当我点击“运行”,浏览器弹出那个整洁的表格页面时,心跳都快了一拍。没有复杂的Maven依赖,没有冗长的XML配置,没有Tomcat启动慢如蜗牛……只用了不到200行代码,一个带数据库、带前后端、带时间筛选的网站就跑起来了。

我截图发到家庭群,老婆回了个“👍”,老丈人居然问:“这是你做的?比淘宝后台还清爽!”——虽然我知道他在吹牛,但那一刻,所有的焦虑都值了。


为什么一个Java程序员要学Django?

很多人问我:“你不是Java干得好好的,为啥折腾Python?”

我的回答是:在代码人生里,语言只是工具,解决问题的能力才是核心。

在外包那三年,我只会死磕Java生态,觉得“非Spring不嫁”。但进了甲方才发现,真实世界的需求千奇百怪——有时候你需要高并发微服务(Java强项),有时候你只需要一个快速原型(Python更合适)。

Django最打动我的,不是它多强大,而是它的开发哲学:Don’t Repeat Yourself(DRY),Convention over Configuration(约定优于配置)。它逼你写出干净、可维护的代码,而不是堆砌样板。

更重要的是,它让我重新找回了写代码的乐趣
还记得大学时第一次用PHP做出一个留言本的兴奋吗?工作后,这种感觉越来越少了。但用Django搭第一个网站时,那种“我创造了点什么”的喜悦,又回来了。


给同行的一点真心话

如果你和我一样,是个困在某种技术栈里的程序员,不妨试试“跨界”。

  • 别怕新语言:Python语法简单到像写英语,三天就能上手基础。
  • 从小项目开始:别一上来就想做抖音,先做个TODO List,再做个博客。
  • 接受“不完美”:我的第一个Django网站没有单元测试、没有权限控制,但它解决了实际问题,这就够了。
  • 记住:工具为人服务:Java也好,Python也罢,都是为了更快更好地交付价值。

我现在还是主力写Java,但团队里有脚本任务、有数据分析需求时,我会主动说:“让我用Python试试。”老板居然很支持,说“技术多元化的团队才有活力”。


结语:代码人生,不止一种活法

从白石洲的握手楼到南山的写字楼,从外包工牌到甲方邮箱,这一路走得不容易。但最大的收获不是工资涨了多少,而是心态变了——我不再把自己定义为“Java程序员”,而是一个“能用合适工具解决问题的工程师”。

上周团建,我和阿哲喝啤酒聊天。他说:“你知道吗?我最早也是做.NET的,后来转Python,现在连Rust都在学。”我笑着举杯:“所以啊,代码人生,从来不是单行道,而是一片旷野。

如果你也在焦虑、迷茫,觉得技术更新太快跟不上——别慌。今晚就打开终端,输入:

pip install django
django-admin startproject myfirstsite

然后,runserver。

你会发现,世界比你想象的温柔。而你的代码人生,才刚刚开始。

(完)

后记:这篇文章写于2024年5月一个周日晚上,窗外下着深圳的暴雨。我刚提交完本周最后一个PR,泡了杯枸杞茶,突然想把这段经历记下来。希望某个深夜刷到这里的你,也能从中找到一点勇气。共勉。

评论 0

最热最新
暂无评论
架构还没想好Lv.1
0
影响力
0
文章
0
粉丝