从零开始搭网站:Django 实战入门与项目实践
开篇:一次“临时救场”的需求

去年公司接到一个新客户的需求,要快速搭建一个内部管理后台,用于跟踪销售数据和客户服务记录。时间紧、任务重,我被安排负责后端开发。一开始想着用现成的 CMS 搭建,但客户需求比较特殊,页面和功能都需要高度定制。
那阵子我刚好在研究 Django,对它的简洁风格和强大的 Admin 系统印象深刻。于是决定尝试用它来快速搭建原型。当时还担心会不会因为经验不足耽误进度,但没想到这趟旅程让我彻底爱上了这个框架,并且成功在一周内交付了基础版本,后面也不断迭代成为部门内部常用的工具之一。
今天想借此机会,结合自己的实战经历,跟大家分享一下我是怎么用 Django 快速上手并完成项目的,希望能给刚入门的同学带来一些实用的帮助。
问题描述:如何又快又好地搭建一个定制化 Web 后台?

这次项目的核心痛点是:
- 时间紧张:客户要求两周内看到可用原型;
- 功能定制性强:需要处理销售数据导入、用户权限管理、报表展示等;
- 团队技术栈分散:前后端协作需要统一接口规范,方便对接后续前端页面;
- 后期维护考虑:需要保证系统的可扩展性和可维护性,避免未来修改困难。
当时我们尝试过几种方案,比如 Node.js + Express 或者 Flask,但在权限管理、Admin 配置和模型设计方面都显得有些笨重或需要大量额外开发工作。最终选择 Django,除了熟悉度外,主要看重它以下几个优势:
- ORM 强大,数据库操作直观高效;
- 内置 Admin 可以快速搭建后台界面;
- 自带认证系统,开箱即用;
- 接口设计灵活,适合 RESTful API 开发;
- 社区活跃,文档完备。
解决方案:Django 的模块化架构+DRF 构建全栈应用
我们最终采用的技术架构如下:

[浏览器] <---> [React 前端页面] <===> [RESTful API (Django Rest Framework)]
↑
数据库(PostgreSQL)
整体结构清晰,职责分明。Django 负责核心业务逻辑、数据存储、用户权限控制和 API 提供;前端通过 Axios 请求调用后端接口进行交互;数据库使用 PostgreSQL,支持 JSON 类型字段,便于日后拓展。
为了满足快速开发,我把整个项目拆分成几个模块:
sales: 销售记录模块customers: 客户信息管理reports: 报表统计功能users: 用户权限和角色管理
每个模块包含 models、views、urls、serializers 等标准结构,便于复用和维护。
为什么选择 DRF?
虽然 Django 的模板渲染可以做到前后端不分离,但考虑到长期维护和接口统一性,我们一开始就决定采用 RESTful 风格设计 API,这样不仅方便前后端协作,还能为未来可能接入移动端或其他服务做准备。
代码实践:一步步带你走完一个最简流程
接下来我会结合我的项目案例,带大家从创建项目到构建第一个功能模块。
第一步:安装与初始化
pip install django djangorestframework
django-admin startproject sales_dashboard .
python manage.py startapp sales
记得将新建的 app 添加到 INSTALLED_APPS 中,同时添加 rest_framework:
INSTALLED_APPS = [
...
'sales',
'rest_framework',
]
第二步:定义模型
以 sales 模块为例,这里我们要存储每一条销售记录的基本信息:
# sales/models.py
from django.db import models
from django.contrib.auth import get_user_model
User = get_user_model()
class Sale(models.Model):
customer_name = models.CharField(max_length=255)
product = models.CharField(max_length=100)
amount = models.DecimalField(max_digits=10, decimal_places=2)
created_at = models.DateTimeField(auto_now_add=True)
owner = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return f"{self.customer_name} - {self.amount}"
然后执行 migrations:
python manage.py makemigrations
python manage.py migrate
第三步:配置 Admin 后台
有了 Admin,我们可以直接在里面查看和管理数据:
# sales/admin.py
from django.contrib import admin
from .models import Sale
@admin.register(Sale)
class SaleAdmin(admin.ModelAdmin):
list_display = ['customer_name', 'product', 'amount', 'created_at']
search_fields = ['customer_name', 'product']
运行服务后访问 /admin 页面就能看到自动为我们生成的管理界面了!
第四步:编写 API 接口
用 DRF 来暴露 RESTful 接口是非常自然的选择,先创建序列化类:
# sales/serializers.py
from rest_framework import serializers
from .models import Sale
class SaleSerializer(serializers.ModelSerializer):
class Meta:
model = Sale
fields = '__all__'
然后写 ViewSet 和路由:
# sales/views.py
from rest_framework import viewsets
from .models import Sale
from .serializers import SaleSerializer
class SaleViewSet(viewsets.ModelViewSet):
queryset = Sale.objects.all()
serializer_class = SaleSerializer
最后在主路由中注册:
# sales_dashboard/urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from sales.views import SaleViewSet
router = DefaultRouter()
router.register(r'sales', SaleViewSet)
urlpatterns = [
path('', include(router.urls)),
]
此时请求 /api/sales/ 就能获取到所有销售记录了,增删改查接口也都齐活!
踩坑经验:那些你可能会遇到的问题及应对方式

在整个开发过程中,我也踩了不少坑,分享几个印象深刻的例子。
1. 数据迁移出错:南迁失败怎么办?
刚开始时我频繁修改模型字段,结果有几次执行 migrate 出现数据库结构不一致的问题。解决方法一般是:
- 查看 migration 文件是否冲突;
- 使用
--fake参数强制同步状态(慎用); - 如果环境允许,清理数据库重建;
- 生产环境则必须谨慎对待,提前做 DB Schema 设计。
💡建议:多练习迁移流程,在开发初期就规划好字段,减少重构次数。
2. DRF 分页设置不生效?
我在返回 API 列表的时候发现分页不生效。检查了很久才发现原来是忘记在 settings 中启用全局分页配置:
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 20,
}
加上这段以后立马就好用了。
3. Admin 显示字段太多,加载很慢怎么办?
随着 Sale 数据量增加,Admin 页面打开特别慢。后来发现是因为默认会加载全部字段,尤其是关联表的字段。这时候可以用以下优化手段:
- 在 ModelAdmin 中显式指定
list_display; - 使用
select_related()减少查询次数; - 对于不需要显示的大字段使用
exclude排除掉。
例如:
class SaleAdmin(admin.ModelAdmin):
list_display = ['id', 'customer_name', 'product', 'amount']
exclude = ('large_json_field', )
def get_queryset(self, request):
return super().get_queryset(request).select_related('owner')
这些小技巧对性能提升非常有效!
效果总结:一周上线,后续持续迭代
项目交付后取得了不错的效果:
- 第一周实现核心功能并部署上线;
- 后续两个月根据反馈逐步加入权限分级、图表分析、Excel 导入等功能;
- 前端用 React 接入接口顺畅;
- 因为使用 DRF,后续还很容易接入了微信小程序作为移动入口。
更重要的是,这套后台现在成为了公司多个项目的通用模块,节省了大量重复开发时间。
经验分享:几点实用建议送给大家
作为一名亲历者,我有一些真心建议想送给正在学习或准备使用 Django 的朋友们:
1. 不要过度设计,先跑起来再说
很多新手总想着先把结构搞完美再动手写,其实没必要。Django 最大的魅力就是简单易上手,先让东西跑起来比什么都重要。等你真正开始调试才明白哪里需要重构。
2. 多用内置组件,少造轮子
Django 的 Admin、Authentication、ORM、中间件等等都是经过多年打磨的精华,能用尽量别自己写。除非真的有必要,否则没必要重复造轮子。
3. 注意权限模型的设计
我早期忽略了权限模型的重要性,后来在多个项目中吃过亏。推荐使用 Django Guardian 或 dj-rest-auth 这类成熟的扩展包来帮助管理细粒度权限。
4. 保持良好的目录结构
尤其当项目复杂起来之后,合理的目录结构非常重要。每个 App 保持独立功能模块,有助于管理和测试。
5. 生产环境一定要配置好日志和监控
Django 默认的日志输出很简单,实际部署时一定记得配置 logging 模块,记录错误、请求日志、性能指标等信息。我还结合 Sentry 做异常上报,极大提高了问题排查效率。
结语:Django 是个值得信赖的老朋友
从最初的临时需求,到现在我们已经在多个项目中使用 Django,它几乎每次都给了我稳定的体验。尤其是在快速开发、后台管理、API 暴露等方面,真的是得力助手。
如果你刚刚开始学 Python Web 开发,或者正苦于找不到合适的框架来做项目,强烈推荐试试 Django —— 它不仅成熟稳定,而且社区丰富、文档详细,绝对是你不会后悔的选择。
最后,希望这篇文章对你有所帮助。如果有任何问题欢迎留言交流!

评论 0