☰
Django全栈开发实战:从模型迁移到Admin后台与DRF接口
2026/10/28 11:34:19 网站建设 项目流程

这次我们直接聊 Django。它最大的特点不是“新”,而是“全”:ORM、Admin 后台、用户认证、表单处理、模板引擎、路由系统全部内置,新手不用在技术选型上反复纠结,装完 Django 就能开始写业务代码。

很多新手第一次从 Java 生态听说过“若依”这类后台管理框架,到了 Python 生态,对应物其实就是 Django Admin。学习 Django 最怕的是抓不住主线,卡在“该先学模型还是先学视图”“要不要一上来就学 Django REST Framework”“模板语法要不要背”这些问题上。其实,只要沿着“建项目 -> 建应用 -> 建模型 -> 迁移数据库 -> 写视图 -> 配路由 -> 渲染模板 -> 注册后台”这条链路,完整跑通一个最小案例,Django 的整体运行逻辑就清楚了。

本文不铺开讲理论,只做一件事:带你把这条开发主线完整跑一遍,顺便把环境准备、Admin 后台、ORM 查询、URL 路由、模板渲染、DRF 接口以及常见坑位梳理清楚。先看核心规格,再动手。

1. Django 框架核心能力速览

能力项说明
框架类型基于 Python 的全栈 Web 框架,采用 MTV(Model-Template-View)架构
当前主流版本Django 4.2 LTS / 5.x
Python 版本要求Django 4.2 建议 Python 3.8+,Django 5.x 要求 Python 3.10+
数据库支持内置 SQLite,支持 MySQL、PostgreSQL、Oracle
内置功能ORM、Admin 后台、认证系统、表单处理、模板引擎、中间件、静态文件管理
API 扩展配合 Django REST Framework(DRF)开发 RESTful API
开发启动方式命令启动,python manage.py runserver
生产部署方式Gunicorn/uWSGI + Nginx,或 Docker 容器化
典型应用场景内容管理网站、企业内部系统、电商后台、API 服务、数据展示系统
新手友好度高,官方文档完善、社区案例多、内置功能降低选型成本

需要注意一点:Django 不是性能最快的 Python Web 框架,但它是“功能最完整”的。它的灵感最初来自新闻网站的内容发布需求,所以内容管理、后台管理、用户体系这类场景是它的强项。如果你只需要一个小型 JSON API,Flask 或 FastAPI 会更轻;但如果你要的是带后台、带用户体系、带数据库管理的完整系统,Django 开箱即用的优势非常明显。

2. 适用场景与使用边界

2.1 适合什么场景

  • 内容型网站:博客、新闻、文档站、企业内部 CMS,Django 内置的 Admin 可以让编辑人员直接维护数据。
  • 管理后台:企业内部数据录入、订单管理、用户管理。Django Admin 基于模型自动生成增删改查界面,开发速度很快。
  • 电商系统:商品、订单、用户、购物车这类业务模型非常适合用 Django ORM 建模。
  • API 服务:配合 Django REST Framework 做移动端或前端项目的后端接口。
  • 数据展示系统:配合 pandas 和图表库,把数据分析结果做成 Web 报表。

2.2 不适合什么场景

  • 高实时性场景:多人实时协同、游戏服务端等,Django 默认是请求响应模式,需要额外引入 Channels 或换更合适的方案。
  • 极微型脚本服务:只有一个接口的小工具,用 FastAPI 或 Flask 更轻量。
  • 性能竞赛型场景:高并发接口需要配合缓存、消息队列、数据库读写分离等架构设计,Django 本身不是问题,但新手直接裸写的风险很高。

2.3 使用边界与合规提醒

Django 常用来处理用户数据和业务数据,开发阶段要遵守几个底线:测试数据不要使用真实用户隐私;生产环境数据库必须做备份;涉及第三方图片、文本、接口素材要有版权或授权;做登录注册功能时,要参考个人信息保护和数据安全相关规范。这不是形式要求,是项目上线前必须过的安全检查。

3. 环境准备与前置条件

Django 的安装门槛很低,核心是 Python 环境。部署前先检查以下几点。

3.1 环境检查清单

  • Python:Django 5.x 需要 Python 3.10 以上,建议安装 Python 3.11 或 3.12,兼容性更好。
  • 虚拟环境:使用 venv 或 conda,避免不同项目的依赖互相冲突。
  • 数据库:开发阶段默认使用 SQLite,零配置直接跑,不需要额外安装数据库服务。
  • 编辑器:VS Code 即可,建议安装 Python 和 Django 扩展插件。
  • Git:配合版本管理,强烈建议。
  • 网络:需要执行 pip install 下载依赖,可以使用国内镜像源加速。

3.2 检查命令

python --version pip --version

如果 Python 版本低于 3.10,建议先升级 Python。直接使用旧版本 Python 安装 Django 5.x,很容易遇到安装失败或运行报错。

3.3 全局依赖隔离

不推荐全局安装 Django。一个常见场景是:电脑上同时有多个 Django 项目,分别依赖不同版本,全局装会让版本互相覆盖。所以每一步新建项目时,先创建虚拟环境,这是最稳妥的做法。

4. 安装部署与启动方式

下面从零开始,一路把 Django 项目跑起来。Windows、macOS、Linux 的命令差异很小,主要是虚拟环境激活方式不同。

4.1 创建虚拟环境

mkdir django_demo cd django_demo python -m venv venv

激活虚拟环境:

  • Windows PowerShell:venv\Scripts\activate
  • macOS / Linux:source venv/bin/activate

激活后命令行前面会出现(venv)前缀,说明已经进入虚拟环境。

4.2 安装 Django

pip install django

如果下载速度慢,可以换用清华镜像源:

pip install django -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完成后验证版本:

python -m django --version

如果输出版本号,说明安装成功。

4.3 创建 Django 项目

django-admin startproject myproject

进入项目目录,查看结构:

myproject/ manage.py myproject/ __init__.py settings.py urls.py wsgi.py asgi.py
  • manage.py:项目管理入口,所有 Django 命令都通过它执行。
  • myproject/settings.py:全局配置,包括数据库、应用注册、时区语言、静态文件等。
  • myproject/urls.py:根路由配置文件。
  • myproject/wsgi.py和asgi.py:生产部署时用的 WSGI/ASGI 入口。

4.4 启动开发服务器

cd myproject python manage.py runserver

默认监听127.0.0.1:8000,浏览器访问http://127.0.0.1:8000/,如果看到 Django 默认欢迎页,说明服务已经正常启动。

端口被占用时,可以手动指定端口:

python manage.py runserver 8080

如果是在云服务器或 NAS 上测试,需要绑定 IP 并放行端口:

python manage.py runserver 0.0.0.0:8000

这里要强调:runserver是 Django 的开发服务器,只适合本地调试和功能验证,不要直接暴露到公网环境作为生产服务。生产部署应该用 Gunicorn + Nginx 或 Docker 方案,这部分在第 7 节展开。

5. 功能测试与效果验证

项目启动成功只是第一步,接下来验证 Django 真正的核心能力:模型、迁移和 Admin 后台。

5.1 创建应用

Django 中“项目”和“应用”是分开的概念。一个项目可以包含多个应用,比如用户应用、文章应用、订单应用。这里创建一个博客应用:

python manage.py startapp blog

创建后生成如下结构:

blog/ migrations/ __init__.py __init__.py admin.py apps.py models.py tests.py views.py

5.2 注册应用

打开myproject/settings.py,在INSTALLED_APPS列表中加入blog:

INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', ]

这一步新手经常跳过。创建应用后不注册,Django 不会加载这个应用的模型和迁移文件,后面很容易出现模板找不到、迁移不生效之类的问题。

5.3 定义模型

打开blog/models.py,定义一个文章模型:

from django.db import models class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.title

三个字段分别对应标题、正文、创建时间。auto_now_add=True表示创建时自动写入当前时间。

5.4 生成并执行迁移

Django 的 ORM 不会直接改数据库,而是先通过迁移文件记录模型变化,再把变化同步到数据库。

python manage.py makemigrations python manage.py migrate
  • makemigrations:根据模型生成迁移文件。
  • migrate:把迁移文件执行到数据库中。

修改模型字段后,必须重新执行这两条命令,数据库才会更新。这是新手最容易忽略的环节。

5.5 注册 Admin 后台

打开blog/admin.py,注册 Article 模型:

from django.contrib import admin from .models import Article admin.site.register(Article)

5.6 创建超级管理员

python manage.py createsuperuser

按提示输入用户名、邮箱、密码。这里要注意:密码输入时不会显示,属于正常现象。

启动服务后访问http://127.0.0.1:8000/admin/,用刚创建的超级用户登录。登录后可以看到 Article 表的增删改查界面,点击添加文章,填入标题和内容,保存。这一步的目的是验证 Django 的 Admin 后台是否能自动生成管理界面。

5.7 验证预期结果

  • 访问/admin/,可以正常登录并看到 Article 模型。
  • 在 Admin 后台添加一条文章记录,保存成功。
  • 数据库中新增了一条数据,这里不需要手动写 SQL。

这一步通过,说明模型、迁移、Admin 后台三条链路已经通了。

6. 接口 API 与批量任务

Django 自带的前端渲染能力适合做后台和内容网站。如果项目需要接口服务,比如给 Vue、小程序或移动端提供数据,官方推荐的方案是 Django REST Framework(DRF)。

6.1 安装并配置 DRF

pip install djangorestframework

在settings.py的INSTALLED_APPS中加入:

INSTALLED_APPS = [ ... 'rest_framework', 'blog', ]

6.2 创建序列化器

新建blog/serializers.py:

from rest_framework import serializers from .models import Article class ArticleSerializer(serializers.ModelSerializer): class Meta: model = Article fields = ['id', 'title', 'content', 'created_at']

序列化器负责把模型对象转换成 JSON 数据,DRF 的 ModelSerializer 是自动完成字段映射的,简单直接。

6.3 编写 ModelViewSet

打开blog/views.py,加入:

from rest_framework import viewsets from .models import Article from .serializers import ArticleSerializer class ArticleViewSet(viewsets.ModelViewSet): queryset = Article.objects.all() serializer_class = ArticleSerializer

ModelViewSet会自动提供 list、create、retrieve、update、delete 五个标准接口。

6.4 配置路由

新建blog/urls.py:

from django.urls import path, include from rest_framework.routers import DefaultRouter from . import views router = DefaultRouter() router.register(r'articles', views.ArticleViewSet) urlpatterns = [ path('api/', include(router.urls)), ]

在项目根路由myproject/urls.py中引入:

from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('blog.urls')), ]

6.5 接口调用测试

重启服务后,使用 curl 测试:

curl http://127.0.0.1:8000/api/articles/

正常会返回 JSON 格式的文章列表:

[ { "id": 1, "title": "第一篇文章", "content": "Django 接口测试", "created_at": "2025-01-01T10:00:00Z" } ]

Python 端调用示例:

import requests response = requests.get("http://127.0.0.1:8000/api/articles/") print(response.status_code) print(response.json())

新增一条数据的 POST 请求:

curl -X POST http://127.0.0.1:8000/api/articles/ \ -H "Content-Type: application/json" \ -d '{"title":"第二篇","content":"通过接口添加"}'

6.6 批量任务思路

Django 做批量任务时,千万不要把耗时逻辑直接写在请求视图里,否则接口会被一个任务拖住超时。

推荐方案:

  1. Django 自定义管理命令:适合定时批量脚本。
  2. Celery + Redis:适合真正的异步任务队列。
  3. 简单场景可以直接写脚本调用 ORM。

自定义管理命令目录结构:

blog/ management/ __init__.py commands/ __init__.py import_data.py

在import_data.py中定义 Command 类,然后通过python manage.py import_data执行。这样可以复用 Django 的项目配置和 ORM,同时不阻塞 Web 请求。

7. 资源占用、性能观察与生产部署要点

7.1 开发环境的资源占用

Django 的开发服务器runserver是单进程多线程模式,资源占用主要由 Python 解释器和当前请求决定。在只有少量并发访问的本地开发场景下,CPU 和内存占用都不高,一台普通的办公电脑就能跑。

SQLite 作为开发数据库时,没有独立的数据库进程,数据文件直接落盘,内存占用低,适合快速验证。但如果写入量变大,SQLite 会出现锁库问题,生产环境建议更换 PostgreSQL 或 MySQL。

观察占用时,Windows 可以使用任务管理器,Linux 使用top或htop,重点看 python 进程的 CPU 和内存指标。

7.2 影响性能的关键因素

  • runserver不适合高并发,生产环境要换 Gunicorn 或 uWSGI。
  • 模板渲染比 API 返回 JSON 更消耗 CPU,静态资源不应由 Django 直接处理。
  • 数据库查询要加索引,尽量用select_related和prefetch_related优化关联查询。
  • 频繁重复查询的接口要加缓存,Django cache framework 支持 Redis 和内存缓存。

7.3 生产部署基础示例

安装 Gunicorn:

pip install gunicorn

启动命令:

gunicorn myproject.wsgi:application -w 4 -b 0.0.0.0:8000

:8000前的地址需要根据实际服务器配置调整。前端再加一层 Nginx 做反向代理和静态文件服务,静态文件通过collectstatic收集到一个目录:

python manage.py collectstatic

这里不展开完整的服务器配置,只需要知道 Django 生产部署的标准链路是“Nginx + Gunicorn + PostgreSQL”,这样可以避免因为中间环节缺失导致的性能问题。

8. 常见问题与排查方法

问题现象可能原因排查方式解决方案
pip install django 失败Python 版本过低或网络问题执行 python --version 检查版本升级 Python;使用-i https://pypi.tuna.tsinghua.edu.cn/simple镜像源
manage.py 命令不存在未激活虚拟环境检查命令行是否有 (venv) 前缀激活虚拟环境
启动项目后打开 404URL 路由未配置检查 myproject/urls.py 和 blog/urls.py添加 path 和 include 配置
新应用页面找不到模板应用未注册到 INSTALLED_APPS检查 settings.py注册应用
模型改了但数据库没有变化未执行 makemigrations 和 migrate查看 blog/migrations 目录重新执行迁移命令
Admin 后台显示英文LANGUAGE_CODE 未设置检查 settings.py设为'zh-hans'
Admin 登录时报 CSRF 错误页面缓存或请求头异常检查浏览器缓存清缓存后重试,正常表单需要 csrf_token
表单提交 CSRF 校验失败模板缺少{% csrf_token %}检查 HTML 表单在 form 中添加{% csrf_token %}
接口返回 403认证和权限配置限制查看 DRF 权限设置根据需求调整 DEFAULT_PERMISSION_CLASSES
端口 8000 被占用其他服务占用了端口Windows 用 netstat,Linux 用 lsof换端口启动,如python manage.py runserver 8080
修改 model 后 migrate 报冲突迁移文件历史不一致查看 migrations 文件不要手动删除迁移文件,保留迁移记录并按顺序迁移
静态文件不显示STATIC_URL 或目录配置错误检查 settings.py合理配置 STATICFILES_DIRS 或执行 collectstatic
生产环境页面无样式DEBUG=False 后 Django 不再处理静态文件检查静态文件收集配置 Nginx 或使用白名单方式服务静态文件

9. 最佳实践与使用建议

9.1 先跑通最小案例再学进阶

第一次学习 Django,不要上来就研究 Channels、Celery、Docker 编排。先把“创建项目 -> 创建应用 -> 定义模型 -> 迁移 -> Admin 后台 -> 写视图 -> 配路由 -> 渲染模板”这条链路跑通。这个最小闭环能覆盖 Django 80% 的核心概念,之后学什么都有上下文。

9.2 正确管理依赖

项目依赖使用requirements.txt固定版本:

pip freeze > requirements.txt

其他人或新服务器部署时:

pip install -r requirements.txt

不固定版本的话,过几个月安装 Django 新版本,很容易遇到接口变化导致代码报错。

9.3 利用 Django 官方文档

Django 官方文档质量很高,而且有中文翻译。遇到问题先查文档,比反复搜索零散博客更高效。官方教程的 Polls 应用示例非常适合新手作为第二练手项目。

9.4 实用建议

  • 每个项目使用独立虚拟环境,不要全局装依赖。
  • 数据库迁移文件提交到 Git,方便团队同步。
  • 设置文件区分开发和生产,敏感信息用环境变量管理。
  • 后台 Demo 和接口测试使用独立环境,不要直接连生产数据库。
  • 定时备份数据库,使用自动化脚本或 Django 管理命令触发。
  • 接口服务部署到服务器后限制访问范围,不要用 runserver 直接暴露公网。
  • 涉及用户隐私数据、版权素材、人脸或个人信息的应用,必须确认合法授权和使用边界。

9.5 最容易踩的坑

  • 忘记迁移数据库,模型一直不生效。
  • 创建应用后没有注册到 INSTALLED_APPS。
  • 修改 settings.py 后忘记重启服务。
  • 生产环境 DEBUG=True,导致安全风险。
  • 模型字段删除时没有确认关联数据,导致数据丢失。

总结与下一步

Django 的学习主线其实很简单:项目、应用、模型、迁移、Admin、视图、路由、模板。把这套链路跑通一次,后面学 DRF 接口、用户认证、Docker 部署都有章可循。

第一次接触 Django,最先应该验证的是 Admin 后台和 ORM 迁移两个环节,因为这两块是 Django 区别于轻量框架的核心优势,也是新手最容易卡住的地方。最容易踩的坑来自两个习惯问题:忘了迁移、忘了注册应用,遇到类似报错时优先检查这两项。

后续扩展方向,我建议按这个顺序来:第一,学 Django 表单和用户认证,做一个带注册登录的完整站点;第二,学 Django REST Framework,把接口能力补上;第三,学 Docker 和 Gunicorn 部署,把项目发布到服务器;第四,再考虑 Celery 异步任务、缓存优化和前后端分离架构。抓住主线,比盲目堆概念更有效。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询