Django入门教程:搭建你的第一个Python网站

全栈手艺人
2025-12-16 01:44
阅读 485

成都,玉林小区的一间老破小里,我一边啃着老妈蹄花,一边敲着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

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝