CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Django 实战入门/课时/Django 概览
RawBlame
课时目录12 节

Django 实战入门

  1. 01Django 概览
  2. 02项目结构
  3. 03URL 路由
  4. 04视图层
  5. 05模型与 ORM
  6. 06查询与优化
  7. 07模板 DTL
  8. 08Admin 与认证
  9. 09表单与安全
  10. 10DRF 与异步任务
  11. 11测试与部署
  12. 12综合练习

Django 概览

MTV、安装与虚拟环境。

30 分钟

Django 概览

这一课你将能做到

  1. 说清楚 Django 是什么、解决什么问题、与 Flask/FastAPI/Spring Boot 的差异
  2. 在本机用 venv + pip 装出 Django 5.x 环境,跑通 runserver 并看到欢迎页
  3. 解释 MTV 架构中 Model、Template、View 各自承担的职责,并能在一次 HTTP 请求里指出它们的位置

为什么要学

如果你想用 Python 写 Web 后端,Django 是绕不开的一个选项。它从 2005 年诞生至今,一直在 Instagram、Pinterest、华盛顿邮报这种体量的产品上服役。和 Flask「给你一把螺丝刀自己造」不同,Django 是「开箱即用的整套工具箱」——ORM、模板、表单、Admin 后台、认证、Session、CSRF 防护、国际化,全部自带。

人话:用 Flask 写项目像买毛坯房自己装修,自由但要自己做水电;用 Django 像买精装房,水电齐全,进来就能住,但你得接受开发商定好的格局。

和本站的关系:本站后端是 Spring Boot + 前后端分离架构,前端 React 通过 REST API 与 Java 通信。Django 既能做同样的事(配合 DRF 出 REST API),也能一把梭——用模板直接渲染 HTML 返回浏览器,省掉前端框架。理解 Django 是理解「全栈式 Web 框架」这条技术路线的最佳入口。

先建立图像

一次 HTTP 请求在 Django 里的旅程(MTV):

浏览器                Django 项目                      数据库
  │                       │                              │
  │  GET /articles/5      │                              │
  ├──────────────────────>│                              │
  │                  urls.py 路由匹配                     │
  │                       │                              │
  │                  views.py 视图函数                    │
  │                       │  Article.objects.get(id=5)   │
  │                       ├─────────────────────────────>│
  │                       │<── 返回 Article 实例 ────────│
  │                       │                              │
  │                  templates/article.html 渲染           │
  │                       │                              │
  │  <html>...</html>     │                              │
  │<──────────────────────│                              │

对比 Spring Boot:

角色DjangoSpring Boot
路由urls.py 的 path()@GetMapping 注解
控制器/视图views.py 函数或类@RestController
数据模型models.py + ORM@Entity + JPA/Hibernate
模板渲染DTL(内置)Thymeleaf(可选,常用前后端分离)
后台管理自带 Admin无内置,需自己写或用第三方

跟着做

步骤 1:确认 Python 版本

Django 5.x 要求 Python 3.10+,建议 3.11 或 3.12:

python --version
# Python 3.12.4

步骤 2:创建虚拟环境

不要把 Django 装到系统 Python 里。每个项目独立一个虚拟环境:

# Windows PowerShell
mkdir django-demo
cd django-demo
python -m venv .venv
.\.venv\Scripts\Activate.ps1

# macOS / Linux
mkdir django-demo && cd django-demo
python3 -m venv .venv
source .venv/bin/activate

激活后命令行前面会出现 (.venv)。

步骤 3:安装 Django 并验证

pip install "Django>=5.0,<5.2"
python -m django --version
# 5.1.x

步骤 4:创建项目并启动

django-admin startproject mysite .
python manage.py migrate
python manage.py runserver

打开浏览器访问 http://127.0.0.1:8000/,看到 Django 火箭页就说明环境 OK。

migrate 这一步会创建 db.sqlite3 文件——Django 默认用 SQLite 作为开发数据库,零配置直接可用。

步骤 5:写第一个视图

新建 mysite/views.py:

from django.http import HttpResponse
from datetime import datetime


def hello(request):
    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    return HttpResponse(f"<h1>Hello Django</h1><p>当前时间:{now}</p>")

改 mysite/urls.py:

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path("admin/", admin.site.urls),
    path("hello/", views.hello, name="hello"),
]

重启 runserver(其实它会自动重载),访问 http://127.0.0.1:8000/hello/,能看到带时间的问候语——你已经走完一次完整的「URL → View → Response」流程。

步骤 6:探索自带 Admin

python manage.py createsuperuser
# 按提示输入用户名、邮箱、密码

访问 http://127.0.0.1:8000/admin/,用刚创建的账号登录。你会看到一个用户/组管理界面——这是 Django 框架免费送的,没写一行业务代码。

讲清楚要点

  1. Django 是「batteries-included」框架:ORM、模板、表单、Admin、认证、Session、迁移、缓存、国际化、CSRF/XSS 防护全在官方包里。Flask 是微框架,只给你路由 + 请求/响应抽象,其他靠扩展。
  2. MTV ≈ MVC,只是命名不同:Django 的 View 对应 MVC 的 Controller,Template 对应 MVC 的 View,Model 就是 MVC 的 Model。别被术语绕晕。
  3. manage.py 是项目命令入口:启动服务、建迁移、创建超级用户、跑测试,全走它。它本质上是对 django-admin 的项目级封装。
  4. 默认开发栈零配置:SQLite + 内置开发服务器,让你专注业务,不必先折腾 MySQL/Nginx。生产再换 PostgreSQL + Gunicorn。
  5. Django 既能全栈渲染 HTML,也能配合 DRF 做纯 API 后端:与 Spring Boot 前后端分离架构完全等价。本站(Spring Boot + React)就是后者这种形态。
  6. 「显式优于隐式」是 Python 哲学,但 Django 例外:Django 大量用「约定优于配置」——模板放 templates/、静态文件放 static/、迁移文件自动按序号命名。遵循约定可省 80% 配置。

你可能会懵的地方

  • Django 和 Flask/FastAPI 怎么选? 全栈 CRUD 站、内部管理系统、内容站:选 Django。微服务、纯 API 网关、需要极致性能:选 FastAPI。介于两者之间想自己组装:Flask。面试别答「看情况」,要说出具体场景。

  • django-admin 和 manage.py 啥区别? django-admin 是全局命令,manage.py 是项目里那份,自动带上 DJANGO_SETTINGS_MODULE 环境变量。项目里只用 manage.py。

  • migrate 到底干了啥? 把 django.contrib.* 这些内置 app 的初始迁移(用户表、session 表等)跑到数据库里。输出里能看到 Applying contenttypes.0001_initial... OK。

  • 为什么默认端口是 8000? 约定俗成。可以用 python manage.py runserver 8080 改。Spring Boot 默认 8080,别在同一台机器同时启动冲突。

  • 生产环境能直接用 runserver 吗? 不能。它是单线程开发服务器,没做安全加固。生产用 Gunicorn/Uvicorn + Nginx。第 11 课会专门讲部署。

错法对照

错法问题正解
全局 pip install django多项目版本互相污染每个项目一个 venv
把 views.py 建在项目根目录找不到模块视图放在 app 目录或项目包内
path("hello", ...) 漏斜杠Django 会自动 APPEND_SLASH 跳转,不一致URL 统一以 / 结尾
HttpResponse 直接返回 dict不是合法响应类型用 JsonResponse(data) 或模板渲染
用 print 调试视图输出到控制台但响应无关用 logging 或 django-debug-toolbar

卡点急救

  1. ModuleNotFoundError: No module named 'django':虚拟环境没激活,或激活了但 pip 装到了别的环境。pip list | grep Django 验证。
  2. 访问 127.0.0.1:8000 一直转圈:端口被占。Windows 用 netstat -ano | findstr :8000 找进程,或直接换端口 runserver 8001。
  3. 改了代码浏览器没变化:开发服务器有时不会重启。Ctrl+C 后重启。仍不行就强制刷新(Ctrl+F5)清浏览器缓存。

面试常问

  • Django 的 MTV 是什么?和 MVC 什么关系? M(Model)管数据,T(Template)管展示,V(View)管业务逻辑。和 MVC 同构:Django 的 View ≈ MVC 的 Controller,Template ≈ MVC 的 View。本质是「框架本身已经充当了 Controller 的一部分(URL 分发)」。

  • Django 的「batteries-included」体现在哪? ORM + 迁移、模板引擎、表单校验、Admin 后台、用户认证、Session、CSRF/XSS 防护、缓存、国际化、信号系统、测试框架。一句话:从接收请求到返回响应,整条链路官方都有解决方案。

  • Django 适合做微服务吗? 可以但不首选。Django 进程较重、启动慢、依赖 Django 全家桶约定。微服务场景一般用 FastAPI/Flask 写轻服务,把 Django 留给「需要后台管理 + 复杂业务逻辑」的核心服务。

自测三问

  1. Django 的 MTV 三个字母分别指什么?各自负责什么?
  2. 为什么推荐每个 Django 项目都用独立虚拟环境?
  3. Django 和 Spring Boot 在「渲染 HTML」这件事上的默认取向有什么差异?

小结一句话

Django 是 Python 生态里功能最全的 Web 框架,用「约定优于配置」换开发速度,既能全栈渲染 HTML,也能配 DRF 做纯 API 后端。

延伸

  • Django 官方文档(中文)
  • 下一课:项目结构——搞懂 settings.py、urls.py、app 划分与请求流转。
加载本节练习…
下一课 →项目结构