Chapter 01

认识 Django 与项目搭建

理解「自带电池」的全功能框架哲学,看懂 MTV 架构与 Flask/FastAPI 的分野,并搭起第一个可运行的 Django 项目。

1.1 Django 是什么

Django 是 Python 世界最成熟的全功能(full-stack)Web 框架,2005 年开源,口号是 The web framework for perfectionists with deadlines。它主张「自带电池」——把 Web 开发的常见需求(数据库、后台、认证、表单、模板)全部内置,让你专注写业务而非拼装轮子。

Batteries Included(自带电池)
框架内置 ORM、迁移、Admin、认证、表单、缓存、国际化等,无需第三方库即可构建完整应用。这是 Django 与「微框架」最大的区别。
MTV(Model-Template-View)
Django 版的 MVC:Model 管数据、Template 管展示、View 管逻辑。框架本身充当 Controller,负责调度请求。
DRY(Don't Repeat Yourself)
不要重复自己。模型定义一次即可派生迁移、表单、Admin、序列化——信息只在一处声明。
Project(项目)
一个 Django 网站的顶层容器,包含配置 settings.py、根路由 urls.py 与 WSGI/ASGI 入口。
App(应用)
项目内可插拔的功能单元,如 blog、users。一个项目由多个 App 组成,App 可跨项目复用。
ORM(对象关系映射)
用 Python 类描述数据库表,用方法调用代替 SQL。Django ORM 支持 PostgreSQL、MySQL、SQLite、Oracle。
WSGI / ASGI
Python Web 服务器网关接口。WSGI 是同步标准(gunicorn/uWSGI),ASGI 是异步标准(uvicorn/daphne),支持 WebSocket。

1.2 Django vs Flask vs FastAPI

维度DjangoFlaskFastAPI
定位全功能框架微框架API 框架
ORM内置需 SQLAlchemy需 SQLAlchemy/Tortoise
Admin 后台✅ 内置
认证系统✅ 内置需扩展需自建
异步部分(ASGI)较弱✅ 原生
适用场景内容站/后台/全栈小服务/自由拼装高性能 API
学习曲线中(约定多)
如何选

• 需要后台管理 + 用户系统 + 数据库的完整网站 → Django
• 小型服务、想自己挑每个组件 → Flask
• 纯 API、追求异步性能与类型提示 → FastAPI

1.3 安装 Django

# 建议用虚拟环境隔离依赖
$ python -m venv venv
$ source venv/bin/activate      # Windows: venv\Scripts\activate

# 安装最新稳定版 Django
$ pip install django

$ django-admin --version
# 5.1.x

1.4 创建项目

# 创建名为 mysite 的项目(末尾的 . 表示当前目录)
$ django-admin startproject mysite .

# 启动开发服务器
$ python manage.py runserver
# Starting development server at http://127.0.0.1:8000/

打开浏览器访问 http://127.0.0.1:8000/,看到火箭欢迎页说明项目已跑起来。

1.5 项目目录结构

mysite/
├── manage.py            # 命令行工具入口
├── mysite/
│   ├── __init__.py
│   ├── settings.py      # 全局配置(数据库/App/中间件)
│   ├── urls.py          # 根 URL 路由
│   ├── asgi.py          # ASGI 部署入口
│   └── wsgi.py          # WSGI 部署入口
└── db.sqlite3           # 默认 SQLite 数据库(迁移后生成)
manage.py
项目管理脚本,封装了 django-admin 并注入项目配置。runservermigratecreatesuperuser 都通过它执行。
settings.py
项目大脑:INSTALLED_APPSDATABASESMIDDLEWARETEMPLATESDEBUGALLOWED_HOSTS 都在这里。
urls.py
URL 分发的根节点,把不同路径映射到不同 App 的路由或视图。

1.6 关键配置速览

# mysite/settings.py(节选)
DEBUG = True                 # 生产环境必须改 False
ALLOWED_HOSTS = []            # 允许访问的域名/IP

INSTALLED_APPS = [
    "django.contrib.admin",       # 后台
    "django.contrib.auth",        # 认证
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": BASE_DIR / "db.sqlite3",
    }
}

1.7 首次迁移与超级用户

# 应用内置 App 的迁移(建 auth/admin 等表)
$ python manage.py migrate

# 创建后台超级管理员
$ python manage.py createsuperuser
# Username / Email / Password ...
登录 Admin

迁移后访问 http://127.0.0.1:8000/admin/,用刚建的超级用户登录,即可看到 Django 自带的后台管理界面——这就是「自带电池」的第一份福利。

1.8 请求处理流程

一次请求在 Django 中的旅程:

  1. 浏览器发起 HTTP 请求到 WSGI/ASGI 服务器。
  2. 请求穿过 中间件(Middleware) 链。
  3. urls.py 按 URL 匹配到对应 View
  4. View 调用 Model 读写数据,渲染 Template
  5. 响应逆序穿过中间件返回浏览器。

1.9 小结与下一步