Django入门教程:搭建你的第一个Python网站
成都,玉林小区的一间老破小里,我一边啃着老妈蹄花,一边敲着Django代码。月薪15k的自由开发者,在这座生活成本低但工资也低的城市里,试图用一行行代码改写自己的命运。
一、那天晚上,我差点删了整个项目文件夹
去年十月的一个周五晚上,大概九点半,我瘫在出租屋那张吱呀作响的二手宜家椅子上,盯着屏幕上满屏的红色报错信息。窗外是成都秋夜特有的湿冷,屋里没开空调——不是舍不得电费,而是空调坏了,修理工说明天才来。我老婆(其实是女朋友,我们还没结婚,但已经一起住了两年)刚洗完澡出来,头发还在滴水,看我一脸生无可恋的样子,忍不住问:
“又卡住了?要不要吃点宵夜?楼下冒菜还开着。”
我苦笑:“不是卡住,是根本跑不起来。Django说我的模型字段类型不对,可我明明照着官方文档写的啊!”
她走过来摸了摸我的头,像安慰一只被雨淋湿的狗:“要不……你先学点别的?比如Go?我看隔壁小王转Go之后,工资涨到22k了。”
我沉默了几秒。其实我也想过转Go。毕竟在成都,Go岗位虽然少,但给的钱确实更香。可问题是——我已经在这套Django项目上花了整整三周时间,从环境配置到数据库迁移,从模板渲染到用户认证,每一步都踩过坑,爬出来时身上还带着泥。现在放弃,等于前功尽弃。
而且,我心里清楚:我不是讨厌Django,我只是讨厌自己太菜。
二、为什么选Django?一个“综合”考量的故事
其实最早接触后端开发时,我也纠结过技术栈。2022年刚辞职做自由开发者那会儿,我手上有三个选择:Node.js、Flask、Django。
- Node.js生态活跃,但回调地狱让我头皮发麻;
- Flask轻量灵活,可我这种新手根本不知道该怎么组织项目结构;
- Django?看起来又重又老派,但它的“Batteries included”(自带电池)哲学特别对我胃口。
什么叫“综合考量”?就是你得算账。
我在成都租的房子月租3500,加上水电燃气网费,固定支出4000出头。自由职业没有五险一金,医保靠自己交,每月再扣800。如果接不到项目,下个月就得吃土。所以,我需要一个能快速交付、稳定可靠、文档齐全的框架——不是为了炫技,是为了活下去。
Django恰好满足这一切。它内置了Admin后台、用户系统、ORM、表单验证、安全防护……这些在真实项目中90%都会用到的功能,它全给你打包好了。你不需要从零造轮疑,只需要专注业务逻辑。
举个例子:上周我接了个本地茶馆的小程序后端需求,要求实现会员积分、预约座位、订单管理。用Django,三天就搭出了原型,客户当场打款50%定金。要是用Flask,光设计用户权限系统就得两天。
所以别听网上那些“Django太重”的论调——对新手和中小项目来说,重量恰恰是安全感。
三、手把手:带你搭一个“假”博客(但真能跑)
好了,废话不多说。今天我就带你从零开始,用Django搭一个最简单的博客网站。这个项目虽然简单,但它包含了后端开发的核心要素:模型(数据)、视图(逻辑)、模板(页面)。
第一步:装环境(别跳过!血泪教训)
首先,确保你装了Python(建议3.8+)。然后创建虚拟环境——这步千万别省!我见过太多人把包装到全局,最后系统Python直接崩掉。
# 创建项目文件夹
mkdir myblog && cd myblog
# 创建虚拟环境(Linux/Mac)
python -m venv venv
# 激活虚拟环境
source venv/bin/activate # Windows用 venv\Scripts\activate
# 安装Django
pip install django
🐍 小贴士:如果你用的是Windows,记得把
source venv/bin/activate换成venv\Scripts\activate。别问我怎么知道的——去年冬天我在Windows上调试了一整晚,才发现自己没激活虚拟环境。
第二步:生成项目骨架
Django有个命令叫startproject,它会自动生成一个标准项目结构:
django-admin startproject mysite .
注意那个.!很多人漏掉它,结果项目嵌套两层目录,后面路径全错。我第一次就栽在这儿,折腾到凌晨三点。
现在你的目录应该是这样的:
myblog/
├── manage.py
├── mysite/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── venv/
第三步:写个模型(也就是你的数据)
我们要做博客,肯定要有文章。在Django里,文章就是“模型”。
先创建一个App(Django把功能模块叫App):
python manage.py startapp blog
然后编辑 blog/models.py:
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
这段代码定义了一篇博客文章:标题、内容、作者(关联Django内置的User)、创建时间。__str__方法是为了在Admin后台显示友好名称。
第四步:让数据库知道这个模型
Django用“迁移”(migration)来同步模型和数据库:
# 注册blog App到settings.py(别忘了!)
# 在 mysite/settings.py 的 INSTALLED_APPS 里加上 'blog'
# 生成迁移文件
python manage.py makemigrations
# 执行迁移
python manage.py migrate
这时候,SQLite数据库(Django默认用它)里就有blog_post这张表了。
第五步:写视图(处理请求)
在 blog/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})
第六步:配路由
在 mysite/urls.py 里引入blog的URL:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
]
再创建 blog/urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
]
第七步:写模板(HTML页面)
Django用模板引擎渲染页面。先在 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.author.username }}</p>
<p>{{ post.content|truncatewords:30 }}</p>
</div>
{% endfor %}
</body>
</html>
第八步:跑起来!
python manage.py runserver
浏览器打开 http://127.0.0.1:8000,你应该看到一个空页面(因为还没文章)。但别急,Django自带Admin后台!
先创建超级用户:
python manage.py createsuperuser
然后访问 http://127.0.0.1:8000/admin,登录后就能添加文章了。
四、关于Go:我不是不用,只是现在不适合
说到这里,可能有人要问:“你开头提到Go,后来怎么不转了?”
其实我一直在关注Go。它的并发模型、编译速度、部署简单性,确实很吸引人。而且成都一些跨境电商公司(比如Shein的外包团队)确实在招Go后端,薪资比Python高30%左右。
但我算了一笔账:
- 我现有的客户都是基于Python/Django的项目;
- 转Go意味着至少两个月没有收入(学习+找新客户);
- 我女朋友明年要考研,家庭经济不能断档。
所以我的策略是:主攻Django,副业学Go。每天抽一小时看《Go语言圣经》,周末用Go写个小工具练手。等手上这个Django项目结款(预计到手18k),再考虑是否全职投入Go生态。
技术没有高低贵贱,只有适不适合当前阶段。就像你不会在房租到期前换城市一样。
五、写给和我一样的“小镇做题家”程序员
我老家在四川一个小县城,大学读的普通二本,学的是信息管理——连计算机都不是。毕业后在成都一家外包公司干了三年CRUD,月薪从6k涨到12k,再也没动过。
决定做自由开发者那天,我和女朋友在IFS楼下喝了杯38块的星巴克,她说:“你要是失败了,大不了我多接两个家教单子。”那一刻,我突然觉得,低生活成本的城市,其实给了我们试错的底气。
Django教会我的,不仅是怎么写后端代码,更是怎么用有限资源做出最大价值。它不酷,不新潮,但稳。就像成都的天气,阴晴不定,但很少极端。
如果你也是月薪不高、不敢裸辞、想靠技术翻身的普通人,别一上来就追风口。先把一个框架学到能接单的程度,赚到第一桶金,再谈转型。
记住:能赚钱的技术,才是好技术。
六、最后一点真心话
写这篇文章的时候,已经是凌晨一点。窗外雨声淅沥,桌上泡面已经凉了。但看着自己亲手搭起来的博客网站,心里有种奇怪的踏实感。
Django或许不是最快的,不是最潮的,但它足够“综合”——它照顾到了新手的脆弱、项目的复杂、生活的琐碎。
而我们这些在二线城市挣扎的开发者,要的不就是一个能让我们安心吃饭、按时交租、偶尔还能请女朋友吃顿老妈蹄花的技术吗?
Go很好,但不是现在。
Django很重,但刚好托得住我。
共勉。
P.S. 如果你照着教程跑通了,欢迎在评论区留言!如果卡住了,也别慌——我当年可是对着“ModuleNotFoundError”哭过的男人。技术路上,没人天生就会,只有不肯放弃的人才能走到最后。
P.P.S. 下期我打算写《Django + Vue 前后端分离实战:接私活必备》,感兴趣的话点个赞?(虽然这个博客还没评论功能,但梦想还是要有的 😅)

评论 0