请写一篇关于【Django入门教程:搭建你的第一个Python网站】的技术文章
写于2024年6月的一个周末,杭州下着小雨,窗外是刚交房半年的小区绿化,我泡了杯瑞幸的生椰拿铁(9.9元券真香),坐在12㎡的书房里敲下这些字。房贷每月6800,工资条上写着22k,但我知道,这一切来之不易。
去年十月,我还在一家电商公司做功能测试。每天的工作就是点点点、写写用例、提提bug。说实话,干得挺没劲的。不是说测试不好,而是我总觉得自己像个“二等公民”——开发们在会议室讨论架构、微服务、高并发,我在旁边默默记下他们说的“这个接口要测幂等性”,心里却在想:“我什么时候也能写出被别人测的代码?”
那会儿我和老婆刚在杭州余杭买了个小两居,78㎡,总价320万。首付掏空了六个钱包,还背上了180万的贷款。每个月光利息就要三千多,加上物业水电,压力山大。某天晚上,她一边刷淘宝一边随口问我:“你是不是该想想转岗的事了?测试这行,再过五年会不会被淘汰啊?”
我心里咯噔一下。其实我早就在B站偷偷看《Python从入门到放弃》系列了,但一直没敢行动。毕竟,我本科学的是机械,转行做测试已经是跨行,现在又要从测试转开发?听起来像极了“中年危机提前发作”。
但现实不等人。年底绩效面谈,主管委婉地说:“你测试做得不错,但团队更需要懂自动化的。”言下之意:要么升级,要么边缘化。
我咬咬牙,决定赌一把——从测试转后端开发。
为什么选Django?而不是Spring Boot?
很多人第一反应是:“后端不都用Java吗?你咋不去学Spring?”
这话没错。我前司的后端全是Java栈,微服务+Dubbo+Nacos那一套,看起来高大上。我也试着啃过《Spring实战》,但说实话,光是配个Maven依赖、搞清楚Bean生命周期,就让我头大如斗。更别说还要处理各种XML配置、AOP切面、事务回滚……作为一个半路出家的“野路子”,我需要的是快速看到成果,而不是在环境配置里卡三天。
这时候,我翻出了大学时蹭课听过的Python。记得老师说过:“Python适合快速原型开发。” 而Django,正是Python生态里最成熟的Web框架之一——自带ORM、Admin后台、用户认证,开箱即用。
更重要的是,我想做个自己的网站。不是那种静态HTML页面,而是一个能真正跑起来、有数据库、能登录注册的小应用。Django正好能满足。
于是,2023年11月的第一个周末,我打开VS Code,新建了一个项目文件夹,取名叫my_first_site。那一刻,手有点抖,仿佛在按火箭发射按钮。
搭建第一个Django网站:从零到能跑
第一步:环境准备(别跳过!)
很多人直接pip install django,结果后面各种版本冲突。我建议用虚拟环境:
python -m venv djangovenv
source djangovenv/bin/activate # Linux/Mac
# Windows用:djangovenv\Scripts\activate
pip install django==4.2.7
为什么指定版本?因为新版可能和教程不兼容。我吃过亏——跟着一个2020年的视频学,结果Django 5.0把urls.py结构改了,折腾半天才发现是版本问题。
第二步:创建项目
django-admin startproject mysite
cd mysite
python manage.py runserver
浏览器打开 http://127.0.0.1:8000,看到那只可爱的火箭了吗?恭喜你,已经跑起来了!
内心OS:就这?这也叫后端?
现实打脸:别小看这一步,多少人卡在runserver报错,比如端口被占用、Python路径不对。我当时就因为装了两个Python版本,死活找不到manage.py在哪。
第三步:创建App(注意:不是Application)
Django里,“项目(Project)”包含多个“应用(App)”。比如一个电商网站,可能有users、products、orders几个App。
python manage.py startapp blog
然后去mysite/settings.py里,把blog加到INSTALLED_APPS:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
# ...其他默认的
'blog', # ← 加这一行
]
第四步:写个简单的视图(View)
在blog/views.py里:
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello, 这是我第一个Django页面!")
再在blog目录下新建urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.hello, name='hello'),
]
最后,在主项目的mysite/urls.py里包含这个App的路由:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')), # ← 加这一行
]
重启服务器,访问 http://127.0.0.1:8000/blog/,看到文字了吗?那一刻,我激动得差点把咖啡打翻在键盘上。
从“能跑”到“有用”:加个数据库
光输出字符串太无聊了。我想做个简单的博客系统——能发文章、能看列表。
Django的ORM真的香。不用写SQL,用Python类定义模型就行。
在blog/models.py:
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
然后执行迁移:
python manage.py makemigrations
python manage.py migrate
Django自动帮你生成SQLite数据库(生产环境建议换PostgreSQL,但本地开发SQLite足够)。
接下来,让这些数据能在页面上显示。改写views.py:
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.all()
return render(request, 'blog/post_list.html', {'posts': posts})
这里用到了模板(Template)。在blog下新建templates/blog/post_list.html:
<!DOCTYPE html>
<html>
<head>
<title>我的博客</title>
</head>
<body>
<h1>所有文章</h1>
{% for post in posts %}
<div>
<h2>{{ post.title }}</h2>
<p>{{ post.content|truncatewords:20 }}</p>
<small>{{ post.created_at }}</small>
</div>
{% endfor %}
</body>
</html>
别忘了改路由,把hello换成post_list。
刷新页面——如果看到空白,别慌!大概率是模板路径没配对。检查settings.py里的TEMPLATES是否包含当前App的模板目录(Django 4.x默认会自动找app/templates/app/,但新手容易搞错层级)。
额外彩蛋:用Django Admin管理内容
Django自带后台管理系统,简直是懒人福音。
先创建超级用户:
python manage.py createsuperuser
按提示输入用户名、邮箱、密码(密码不会显示,正常输入就行)。
然后在blog/admin.py注册模型:
from django.contrib import admin
from .models import Post
admin.site.register(Post)
重启服务器,访问 http://127.0.0.1:8000/admin,用刚才的账号登录。你会看到一个干净的后台,可以增删改查文章!
真实场景:上周五晚上,我老婆看到这个后台,惊讶地说:“你这不就是个简易版WordPress?” 我得意地点头:“对啊,而且只用了不到200行代码。”
为什么我说Django适合“转行者”?
回过头看,我选择Django而不是Java Spring,有几个关键原因:
- 学习曲线平缓:Java后端讲究“约定大于配置”,但那些约定对新手来说就是黑盒。Django虽然也有“魔法”,但文档极其友好,官方Tutorial写得像小说一样流畅。
- 快速反馈:写几行代码就能看到网页变化,这种正向激励对自学的人太重要了。而Java项目动辄要启动整个Spring上下文,等一分钟才看到“Hello World”,心态容易崩。
- 综合能力培养:Django逼你理解MVT(Model-View-Template)模式,这和MVC本质相通。等你熟悉了这套思维,再去看Java的Controller、Service、DAO分层,会发现底层逻辑惊人地一致。
- 副业可能性大:我后来用Django写了个小爬虫监控房价(用requests + BeautifulSoup抓链家数据,存进Django DB,再用前端展示趋势图)。这种“全栈小工具”,用Django几天就能搭出来,换成Java可能光搭环境就要一天。
说到爬虫——很多人以为Python只有爬虫,其实爬虫只是Python的冰山一角。Django让我意识到,Python真正的优势在于快速构建可运行的系统,而不仅仅是脚本自动化。
转型之后:从15k到22k,但我更看重什么?
今年3月,我成功内部转岗为后端开发,薪资从15k涨到22k。HR面谈时问我:“为什么选Python而不是继续深耕Java?”
我说:“我不是排斥Java,而是Django让我在最短时间内证明了自己能交付完整功能。等我站稳脚跟,自然会去学更多技术栈。后端的本质不是语言,而是解决问题的能力。”
现在,我依然会看Java项目,也会研究Go、Rust。但我不再焦虑“必须选对语言”。技术是工具,人才是核心。
更重要的是,我不再是那个只会提bug的测试员。上周,我独立负责了一个订单状态同步模块,用Django写了API,对接了第三方物流系统。上线那天,产品跑过来拍我肩膀:“兄弟,牛啊!” ——这种成就感,比工资涨5k还爽。
给想转行的朋友几点真心话
- 别追求“一步到位”:我第一个Django项目漏洞百出——没做权限控制、没分页、XSS都没防。但没关系,先跑起来,再优化。完美主义是自学的最大敌人。
- 善用免费资源:Django官方文档(https://docs.djangoproject.com/)是我见过最好的技术文档之一,中文翻译也很全。别一上来就买课,先啃文档。
- 结合兴趣做项目:你想监控基金?做个Django站点自动抓取天天基金网数据。你喜欢追剧?做个豆瓣电影收藏站。有动力,才能坚持。
- 别怕暴露“菜”:我在公司内网贴过一篇《Django踩坑记录》,被好几个同事收藏。大家反而觉得我踏实。程序员圈子,真诚比装懂更受欢迎。
最后:技术之外,生活才是主线
写这篇文章的时候,老婆在客厅喊:“房贷还款日快到了,别光写代码,记得转钱!”
我笑着应了一声,心里却很踏实。三年前,我还是个对Linux命令都发怵的测试小白;今天,我能用代码创造价值,养得起这个家。
Django不是终点,它只是我转型路上的一块跳板。未来,我可能会深入微服务、云原生,甚至尝试用Rust重写性能瓶颈模块。但无论用什么技术,记住:我们写代码,是为了更好地生活,而不是被技术绑架。
所以,如果你也在焦虑转行、房贷、35岁危机……不妨从一个小项目开始。
就现在,打开终端,敲下:
django-admin startproject your_future
你的未来,值得被认真对待。
作者:一个从测试转开发的普通程序员,坐标杭州,房贷6800/月,梦想是写出不被自己嫌弃的代码。

评论 0