从零开始用 Django 快速搭建网站:我的第一个 Python Web 实践
开篇:为什么我会选择写这篇教程?

刚入行那会儿,我是个前端工程师,对后端一窍不通。虽然也了解一些基础的 Node.js 知识,但总觉得在做个人项目或小团队项目时,后端开发太麻烦——要装数据库、配置服务器、设计接口……每次都要花大量时间折腾。
直到有一次公司让我快速搭建一个内部使用的任务管理系统,我才第一次接触了 Django。原本以为门槛很高,结果一上手发现它的“开箱即用”和“约定优于配置”的理念真的让我惊艳。Django 不仅帮我省下了大量开发时间,而且还能轻松应对日常的功能扩展和维护需求。
所以今天我想通过这篇文章分享一下我是如何一步步使用 Django 搭建起自己的第一个网站的,同时穿插一些实际工作中踩过的坑和解决方案,希望对正在入门 Django 的你有所帮助。
问题描述:接到的第一个小项目

那是我刚转岗到后端的时候,老板交给我一个简单的任务:
“我们部门最近需要一个在线表单提交系统,用于员工填写每日工作汇报。页面不要太复杂,但要有用户登录、数据录入、展示和导出功能。”
听起来不难,但如果从头开始搞一个后端系统,包括:
- 用户鉴权(登录/注册)
- 表单创建、提交、展示
- 数据存储
- 后台管理
- 安全性处理(CSRF/XSS)
这些都得一一考虑。
最开始我也想过要不要用 Flask 自己搭一套框架,但想到后面可能还要自己实现权限控制、后台管理等功能,心里就发怵。最终,我决定试试看 Django,据说它很适合这种中等规模的内容型管理系统。
解决方案:Django 架构下的快速原型开发

第一步:环境准备与项目初始化
我先安装了 Python 和 pip,然后用 pip 安装了 Django:
pip install django
接着创建项目:
django-admin startproject daily_report_system
cd daily_report_system
python manage.py startapp reports
这样我就有了一个 daily_report_system 的项目和一个叫做 reports 的应用模块。
为了便于后续部署,我还专门创建了一个虚拟环境(推荐大家都这么做):
python -m venv venv
source venv/bin/activate # Windows 下是 venv\Scripts\activate
第二步:数据库模型设计
我首先设计了两个核心模型:User 和 Report。其实 Django 已经自带了用户系统,我只需要继承一下即可。
# reports/models.py
from django.db import models
from django.contrib.auth.models import User
class Report(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.author} - {self.created_at}"
然后执行迁移:
python manage.py makemigrations
python manage.py migrate
数据库默认是 SQLite,这对于初期测试完全够用了。如果后期访问量上去,我可以切换为 PostgreSQL 或 MySQL。
小插曲:有次我在本地开发完一切正常,上线之后发现
makemigrations执行失败,后来才意识到忘记把 migrations 目录提交到 Git 上,导致线上环境没有生成对应 SQL 文件。教训啊,记得.gitignore中千万别排除掉 migrations!
第三步:快速构建视图与模板
接下来就是视图部分了。为了方便,我一开始用了 Django 的通用视图类(如 ListView、DetailView、CreateView),这样可以大大减少代码量。
举个例子,展示所有日报内容的视图如下:
# reports/views.py
from django.views.generic import ListView
from .models import Report
class ReportListView(ListView):
model = Report
template_name = 'reports/report_list.html'
context_object_name = 'reports'
模板文件放到 reports/templates/reports/report_list.html 即可生效(前提是在 settings.py 中配置了模板路径)。
登录页面我直接用了内置的 auth 视图:
# urls.py
from django.contrib.auth import views as auth_views
urlpatterns = [
path('login/', auth_views.LoginView.as_view(template_name='login.html'), name='login'),
]
是不是非常便捷?连登录页面都不用自己写了。
第四步:配置 Admin 后台
Django 最让我惊喜的一点是自带的后台系统,简直是轻量级 CMS 的神器。
只需要将你的模型注册进 admin 即可:
# reports/admin.py
from django.contrib import admin
from .models import Report
admin.site.register(Report)
访问 /admin 页面就能看到完整的数据操作界面。对于运营同事或者非技术人员来说简直福音。
不过我也遇到过问题:刚开始注册了多个 app 后,admin 页面看起来一团糟。于是我学会了使用装饰器来定制显示字段和排序方式:
@admin.register(Report)
class ReportAdmin(admin.ModelAdmin):
list_display = ('author', 'created_at')
search_fields = ['content']
这样一看就清爽多了。
第五步:部署上线
开发完成之后,我用的是免费的 PythonAnywhere 做上线测试。
需要注意几个关键点:
- 静态资源处理:Django 默认不会自动提供 static 文件。你需要设置好
STATIC_ROOT并运行collectstatic。 - 域名绑定:如果你要用自定义域名,记得去 DNS 那边配 CNAME。
- 生产环境数据库:SQLite 在并发写入较多时性能不佳,这时候应该换成 PostgreSQL 或 MySQL。
- 安全防护:开启 DEBUG=False,设置 ALLOWED_HOSTS,防止主机头攻击。
我有一次就是因为没设置 ALLOWED_HOSTS,结果日志里发现有一堆莫名其妙的请求来源。吓得赶紧补上配置。
效果总结:项目的落地成果

这个项目前后大概花了我一周左右的时间,包括前后端一起搞定。
最后产出的功能包括:
- 用户注册/登录
- 每日日报提交
- 所有人的日报列表展示
- 管理员后台查看和导出数据
而且整个结构清晰,易于扩展。比如后来产品说要加上评论功能,我只需要再添加一个 Comment 模型,加个视图,两小时就能搞定。
最重要的是,整个过程让我真正理解了 Django 的设计理念:“Don’t Repeat Yourself (DRY)”,还有“Convention over Configuration(约定优于配置)”。
经验分享:给新手的建议与踩坑提醒
✅ 技术选型建议
如果你要做:
- 内容管理系统(CMS)
- 管理后台系统
- 博客、论坛、任务系统
- 快速 MVP 开发
那么强烈推荐使用 Django,尤其是初学者。Flask 虽然灵活,但需要手动集成的东西太多;而 Django 已帮你预设好了很多常见场景所需的功能。
当然,如果你想追求更极致的性能或微服务架构,可以看看 FastAPI 或 Gin,但对于绝大多数中小型项目,Django 更省心。
🧠 学习建议
- 多动手,少看书:Django 的官方文档已经足够详细,与其死记硬背各种函数,不如跟着做一个简单项目。
- 合理使用通用视图:别一开始就从头写视图逻辑,Django 提供了很多基于类的视图,能节省大量重复代码。
- 重视数据库设计:良好的模型关系是未来扩展的关键。不要怕改 migration,但尽量避免频繁重命名模型字段。
- 善用 admin 界面:不仅能辅助调试,还能作为轻量级运营后台快速交付。
⚠️ 常见坑与解决办法
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 页面空白或报错 500 | 设置了 DEBUG=False 但未配置 Allowed Hosts |
在 settings.py 中正确设置 ALLOWED_HOSTS |
| 迁移失败 | 缺少 migration 文件或冲突 | 检查 git 是否提交完整 migrations 目录,或使用 --fake 参数临时解决 |
| 静态文件加载失败 | 没有执行 collectstatic | 开发环境下使用 runserver 可以,上线必须执行此命令 |
| 登录不了 admin | 没有创建 superuser | 使用 createsuperuser 创建管理员账号 |
🚀 性能优化建议
虽然这不是一个大型项目,但我还是想提几点常见的 Django 性能优化技巧:
- 数据库查询优化:
- 多用
select_related()和prefetch_related()避免 N+1 查询 - 少用
filter().last(),多用order_by('-id').first()
- 多用
- 缓存机制:
- 使用 Redis 或内存缓存常用页面或 API 接口结果
- 可以考虑使用 Django Cache Framework
- 异步任务队列:
- 对于发送邮件、导入导出等耗时操作,可以结合 Celery + Redis/Redis Queue 异步执行
- 静态文件 CDN:
- 上传图片等大体积文件建议使用七牛、阿里云 OSS 等对象存储服务,提升加载速度
结语:Django 让我更快地走向“全栈”
回想起当初那个只会写 HTML/CSS 的我,现在可以独立搭建完整的网站系统,确实感慨万千。
Django 对于我这种从其他语言或方向转型的人来说,是一个非常好的跳板工具。它不仅帮你解决了大量基础设施的问题,还提供了清晰的开发结构。
如果你也有一个想法,或者正苦恼于后端怎么起步,不妨试着用 Django 动手做一个小项目吧。相信你也会像我一样,在一次次“跑通”的喜悦中逐渐爱上它。
如有疑问,欢迎留言交流。
或者你也正在尝试用 Django 做项目?不妨告诉我你在做什么有趣的项目,我们可以一起探讨!

评论 0