《请写一篇关于【Django入门教程:搭建你的第一个Python网站】的技术文章》
去年十月的一个周五晚上,我坐在北京回龙观那间月租3500、隔音差到能听见隔壁情侣吵架的出租屋里,盯着屏幕上一行行代码发呆。桌上泡面已经凉了,老婆——那时候还是女朋友——刚发来消息:“你又加班啊?别太拼了,身体要紧。”
我苦笑了一下,回了个“嗯”,却没敢告诉她,其实我根本没在加班。我只是卡在一个Django的路由配置上,整整三个小时,页面就是404。窗外秋风呼啸,屋子里只有机械键盘敲击的咔嗒声,还有我内心深处那种熟悉的焦虑感:“是不是我真的不适合做程序员?”
那时我已经相亲了N次——准确说是7次。第6次见面时,对方听说我是“搞IT的”,眼睛一亮,结果一听我月薪15k、还在租房、没有北京户口,笑容立马收敛了三分。第7次,就是现在的老婆。她也是北漂,做会计的,第一次见面就问我:“你累吗?”
我说:“累,但还能扛。”
她点点头:“那就好,我也累,但咱们一起扛吧。”
就是这句话,让我在无数个想放弃的深夜里,多撑了十分钟。
为什么我要学Django?
其实我最早是学Go的。
对,就是那个“Golang”。大学实习时带我的老大是个Go粉,张口闭口“并发模型”、“goroutine”,还总说“Python太慢,不适合高并发”。我信了,毕业后也一直用Go写微服务、API网关,自以为走在技术前沿。
但现实很骨感。去年公司裁员,我所在的Go后端组直接砍掉一半。HR找我谈话时说得委婉:“小陈啊,你的技术没问题,但业务方向调整……我们更需要全栈型人才,能快速出活的那种。”
那天走出公司大楼,北京的秋天干冷刺骨。我站在国贸地铁口,打开BOSS直聘,发现大多数中小公司招的都是“Python + Django/Flask”经验。尤其是那些想快速上线MVP(最小可行产品)的创业公司,根本等不起你用Go慢慢搭一套完整的微服务架构。
那一刻我才明白:技术没有高低贵贱,能解决问题、能让你活下去的,才是好技术。
于是,我决定从头学Django。
第一步:别被“框架”吓住
说实话,刚开始看Django文档时,我差点劝退自己。
“MTV模式”?“ORM”?“中间件”?一堆术语像天书。再加上网上有些教程一上来就讲“如何集成Celery做异步任务”、“如何用Docker部署”,我心想:我只是想搭个能跑的网页,不是要造火箭啊!
后来我冷静下来,告诉自己:就像相亲一样,别一上来就想找完美对象,先找个能聊天的试试。
于是我定了个小目标:用Django搭一个“相亲记录管理器”——记录每次相亲的时间、地点、对方特点、后续有没有联系。
听起来有点傻,但对我而言,这项目有真实需求。而且,它简单:只需要一个表单、一个列表页,再加点增删改查。
环境搭建:别在第一步就翻车
我用的是macOS(Windows用户别急,后面会提兼容性),首先确保你装了Python 3.8+。然后:
# 创建虚拟环境(强烈建议!别污染全局)
python -m venv mysite_env
# 激活环境
source mysite_env/bin/activate
# 安装Django
pip install django
# 验证安装
django-admin --version
这一步千万别跳过虚拟环境!我第一次就图省事直接pip install django,结果后来和系统其他包冲突,折腾半天才重装。
接着,创建项目:
django-admin startproject dating_manager
cd dating_manager
这时候你会看到一个叫dating_manager的文件夹,里面有个manage.py——这是你的“万能遥控器”,后面所有操作都靠它。
运行开发服务器:
python manage.py runserver
浏览器打开 http://127.0.0.1:8000,如果看到那只可爱的火箭图标和“It worked!”,恭喜你,Django世界的大门打开了!
小插曲:我第一次运行时端口被占用了,报错“Address already in use”。一查,原来是我之前用Go写的某个服务还在后台跑着。无奈kill掉,心里默默吐槽:“Go,你真是阴魂不散啊。”
创建你的第一个App:别把Project和App搞混
Django里有个概念容易混淆:Project ≠ App。
- Project 是整个网站,比如“dating_manager”
- App 是网站里的一个功能模块,比如“记录相亲”、“用户登录”
所以我们要新建一个App:
python manage.py startapp records
然后在dating_manager/settings.py里,找到INSTALLED_APPS,加上:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
# ... 其他默认的
'records', # ← 加这一行
]
这一步很重要!否则Django不会加载你的App。
数据模型:用Python定义数据库
相亲记录需要存什么?我列了几个字段:
- 对方姓名
- 相亲日期
- 地点(比如“朝阳大悦城星巴克”)
- 印象(“聊得来” / “全程玩手机”)
- 是否继续联系
在records/models.py里写:
from django.db import models
class DateRecord(models.Model):
name = models.CharField(max_length=100)
date = models.DateField()
location = models.CharField(max_length=200)
impression = models.TextField()
contacted = models.BooleanField(default=False)
def __str__(self):
return f"{self.name} @ {self.date}"
写完别忘了生成并执行数据库迁移:
python manage.py makemigrations
python manage.py migrate
这时候Django会自动帮你创建SQLite数据库(开发够用),连SQL都不用写——这就是ORM的魅力。
后台管理:Django送你的“免费CRM”
Django自带Admin后台,简直是新手福音。
先在records/admin.py注册你的模型:
from django.contrib import admin
from .models import DateRecord
admin.site.register(DateRecord)
然后创建超级用户:
python manage.py createsuperuser
按提示输用户名、邮箱、密码(我设成了admin / 123456,别学我,生产环境一定要强密码)。
重启服务器,访问 http://127.0.0.1:8000/admin,用刚才的账号登录。你会发现,一个完整的CRUD界面已经自动生成!你可以添加、编辑、删除相亲记录,连搜索、过滤都有。
我当时惊呆了——这要是用Go从零写,至少得两天。Django半小时搞定。
老婆后来试用了一下,笑着说:“你这系统比我Excel表格还好用。” 我得意地说:“那当然,这可是Django!”
前端展示:写个简单的页面
光有后台不够,得让用户看到数据。
在records/views.py里写一个视图:
from django.shortcuts import render
from .models import DateRecord
def record_list(request):
records = DateRecord.objects.all().order_by('-date')
return render(request, 'records/list.html', {'records': records})
然后在records/目录下新建templates/records/,创建list.html:
<!DOCTYPE html>
<html>
<head>
<title>我的相亲记录</td>
</head>
<body>
<h1>相亲记录</h1>
<ul>
{% for record in records %}
<li>
{{ record.date }} - {{ record.name }} @ {{ record.location }}
{% if record.contacted %}
✅ 已联系
{% else %}
❌ 无后续
{% endif %}
</li>
{% endfor %}
</ul>
</body>
</html>
最后,在dating_manager/urls.py里配置路由:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('records.urls')),
]
并在records/下新建urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.record_list, name='record_list'),
]
刷新首页,你的相亲记录就展示出来了!
关于Go和GitHub的一点碎碎念
我知道有人会问:“既然Django这么快,为什么还要学Go?”
我的答案是:工具不同,场景不同。
Go适合高性能、高并发的服务,比如支付系统、实时通信;而Django适合快速构建业务逻辑复杂的Web应用,比如后台管理系统、内容平台。
就像我和老婆——她是稳重型(像Django,可靠、全面),我是急性子(像Go,快、直接)。互补才长久。
至于GitHub,它是我学习路上的灯塔。每当我卡住,就去搜django tutorial github,总能找到开源项目参考。我也把自己的“相亲记录器”传了上去(当然匿名处理了数据),仓库地址就不放了,毕竟有点社死 😅。
但我想说的是:别怕代码丑,先跑起来。 GitHub上99%的项目,第一版都烂得像泡面汤。重要的是开始。
回老家?还是留下?
上周五晚上,我和老婆坐在阳台上吃火锅(终于不用泡面了),聊起未来。
“你觉得咱要不要回老家?”她问,“你爸妈年纪大了,而且那边房价才8000一平。”
我沉默了一会儿。北京机会多,但压力大;老家安稳,但技术岗位少。可转念一想,现在远程办公越来越普遍,Django这种全栈技能,反而让我有了“地理自由”。
我甚至可以接一些海外的小项目,在GitHub上找freelance机会。月薪不一定比北京高,但生活成本低,幸福感可能更高。
最重要的是——我不再被“必须用某种语言”的执念绑架了。Go也好,Python也罢,都是工具。我能解决问题,就能生存,就能给家人更好的生活。
给新手的几点真心话
- 别追求“一步到位”:你的第一个Django项目可以很简陋,能跑就行。
- 善用官方文档:Django文档是公认最好的之一,别总依赖短视频教程。
- 虚拟环境是保命符:永远别在全局装包。
- GitHub是你的好朋友:看别人的代码,比自己瞎琢磨快十倍。
- 允许自己犯错:我第一次部署上线,把DEBUG=True忘关了,数据库密码差点泄露……但那又怎样?活着就好。
结语:技术之外,生活才是主线程
写这篇教程时,我刚收到老家一家公司的offer,月薪18k,但房租只要1200。老婆说:“回去吧,反正你用Django、用Go,在哪都能干活。”
我点点头,心里踏实了许多。
曾经我以为,程序员的价值在于掌握多少黑科技、能写多复杂的算法。但现在我明白了:真正的价值,在于用技术解决真实问题,让生活变得更好一点。
哪怕只是记录一次失败的相亲,哪怕只是给父母装一个能视频的网页——这些小事,才构成了我们活着的意义。
所以,如果你也在学Django,别焦虑。
打开终端,敲下django-admin startproject hello_world,
然后,对自己说一句:
“兄弟,咱们慢慢来。”
毕竟,代码会跑,日子也会好起来的。

评论 0