跳到主要内容

Django 教程

Django 是一个高级 Python Web 框架,鼓励快速开发和简洁实用的设计。它由经验丰富的开发者构建,解决了 Web 开发中的许多麻烦,让你可以专注于编写应用程序,而不必重复造轮子。

什么是 Django?

Django 是一个全功能的 Web 框架,提供了构建 Web 应用所需的大部分组件。它的核心理念是"开箱即用",让开发者能够快速构建安全、可维护的网站。

Django 的诞生背景

Django 最初诞生于 2003 年,由堪萨斯州劳伦斯的《世界在线》新闻网站的 Web 开发团队开发。当时他们需要在短时间内完成多个新闻网站的开发,于是创建了一个通用的 Web 框架来提高效率。2005 年 7 月,Django 以开源的形式发布,并以著名爵士乐吉他手 Django Reinhardt 命名。

核心特性

1. 完整的功能集

Django 遵循"开箱即用"的理念,提供了构建 Web 应用所需的一切:

  • ORM(对象关系映射):使用 Python 类定义数据模型,自动生成数据库表结构
  • 自动化的管理后台:根据模型自动生成功能完备的管理界面
  • 优雅的 URL 设计:简洁、优雅的 URL 路由系统
  • 模板引擎:强大的模板系统,支持模板继承
  • 表单处理:自动生成表单、数据验证和错误处理
  • 缓存系统:灵活的缓存框架,支持多种缓存后端
  • 国际化:完整的国际化和本地化支持

2. MTV 架构模式

Django 采用 MTV(Model-Template-View)架构模式,这是 MVC 模式的一种变体:

  • Model(模型):负责数据存取层,定义数据结构和数据库操作
  • Template(模板):负责表现层,决定如何展示数据
  • View(视图):负责业务逻辑层,处理请求并返回响应

3. 安全性

Django 非常重视安全性,帮助开发者避免许多常见的安全错误:

  • SQL 注入防护:ORM 自动转义参数
  • XSS 防护:模板系统自动转义 HTML
  • CSRF 防护:内置跨站请求伪造保护
  • 点击劫持防护:提供点击劫持保护机制
  • 密码哈希:安全的密码存储机制

4. 可扩展性

Django 采用组件化设计,各个模块相互独立:

  • 可以替换模板引擎、ORM、缓存系统等组件
  • 支持多种数据库后端
  • 易于添加第三方应用

Django 与其他框架对比

特性DjangoFlaskFastAPI
类型全栈框架微框架现代 API 框架
学习曲线中等
内置功能非常丰富最小化中等
管理后台内置需扩展
ORM内置需扩展
异步支持支持需扩展原生
适用场景全功能网站小型应用/微服务API 服务

Django 项目结构

一个典型的 Django 项目结构如下:

myproject/
├── manage.py # 项目管理脚本
├── myproject/ # 项目配置目录
│ ├── __init__.py
│ ├── settings.py # 项目设置
│ ├── urls.py # 主 URL 配置
│ ├── asgi.py # ASGI 部署入口
│ └── wsgi.py # WSGI 部署入口
└── myapp/ # 应用目录
├── __init__.py
├── admin.py # 管理后台配置
├── apps.py # 应用配置
├── models.py # 数据模型
├── views.py # 视图函数
├── urls.py # URL 配置
├── forms.py # 表单定义
├── migrations/ # 数据库迁移文件
│ └── __init__.py
├── templates/ # 模板目录
│ └── myapp/
└── static/ # 静态文件
└── myapp/

项目与应用的区别

在 Django 中,项目(Project)应用(App) 是两个重要的概念:

  • 项目:一个 Django 项目是一个完整的 Web 应用,包含配置和多个应用
  • 应用:应用是完成特定功能的模块,可以在多个项目中复用

一个项目可以包含多个应用,每个应用专注于一个特定的功能领域。

适用场景

适合使用 Django 的场景

  1. 内容管理系统(CMS):Django 的管理后台非常适合内容管理
  2. 电子商务网站:完整的用户认证、数据库操作支持
  3. 社交网络:处理用户关系、内容发布等功能
  4. 新闻和博客网站:Django 最初就是为新闻网站设计的
  5. 企业内部系统:快速开发后台管理系统
  6. API 服务:配合 Django REST Framework 构建 RESTful API

可能不太适合的场景

  1. 简单的静态网站:可以考虑纯静态网站生成器
  2. 实时通信应用:需要大量 WebSocket 的应用,考虑 FastAPI
  3. 微服务架构:Flask 或 FastAPI 可能更轻量

教程目录

入门基础

核心概念

表单处理

进阶特性

高级主题

  • REST API - Django REST Framework 入门
  • 测试 - 单元测试和集成测试
  • 部署 - 生产环境部署指南

参考资料

快速开始

让我们创建一个最简单的 Django 项目:

# 安装 Django
pip install django

# 创建项目
django-admin startproject mysite

# 进入项目目录
cd mysite

# 运行开发服务器
python manage.py runserver

访问 http://127.0.0.1:8000/,你将看到 Django 的欢迎页面。

创建一个应用并添加视图:

# 创建应用
python manage.py startapp myapp
# myapp/views.py
from django.http import HttpResponse

def hello(request):
return HttpResponse("Hello, Django!")
# mysite/urls.py
from django.urls import path
from myapp.views import hello

urlpatterns = [
path('hello/', hello),
]

现在访问 http://127.0.0.1:8000/hello/,你将看到 "Hello, Django!"。

学习建议

  1. 理解 MTV 架构:先理解 Django 的整体架构,再深入学习各组件
  2. 动手实践:边学边做,完成一个完整的项目
  3. 阅读官方文档:Django 官方文档非常详细,是最好的学习资源
  4. 使用 Django Admin:充分利用 Django Admin 快速构建后台
  5. 学习 Django REST Framework:如果需要构建 API,DRF 是必备技能

延伸阅读