一、Django 库简介
Django 是 Python 生态中 功能最全面的 Web 开发框架,遵循 MTV(Model-Template-View)架构模式,提供从数据库操作到前端渲染的全套工具链。截至 2025 年,Django 被 Instagram、Mozilla 等企业广泛采用,其核心特点包括:
- 开箱即用:内置 ORM、表单系统、管理后台和安全防护,无需重复造轮子。
- 高性能扩展:支持百万级用户量的应用,通过缓存、异步任务(Celery)和数据库优化实现高并发。
- 模块化设计:通过应用(App)拆分功能模块,支持插件化扩展(如 REST API、GraphQL)。
- 全链路安全:内置 CSRF 防护、XSS 过滤和 SQL 注入防御,符合企业级安全标准。
二、核心组件与架构
1. 模型(Model)
- 功能:通过 ORM(对象关系映射)定义数据库结构,支持主流数据库(MySQL、PostgreSQL、SQLite)。
- 示例:
python
说明:from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey('Author', on_delete=models.CASCADE) publish_date = models.DateField(auto_now_add=True)
CharField
定义字符串字段,ForeignKey
关联其他模型,auto_now_add
自动记录创建时间。
2. 视图(View)
- 功能:处理业务逻辑,接收请求并返回响应(如 HTML、JSON)。
- 示例:
python
说明:from django.shortcuts import render from .models import Book def book_list(request): books = Book.objects.filter(author__name="鲁迅") return render(request, 'books/list.html', {'books': books})
objects.filter()
执行数据库查询,render()
渲染模板。
3. 模板(Template)
- 功能:动态生成 HTML,支持模板继承和逻辑控制。
- 示例:
html
说明:<!-- list.html --> <ul> {% for book in books %} <li>{{ book.title }} - {{ book.publish_date|date:"Y-m-d" }}</li> {% endfor %} </ul>
{% for %}
循环遍历数据,|date
为过滤器格式化日期。
4. 路由(URLconf)
- 功能:将 URL 映射到视图函数,支持动态参数和正则表达式。
- 示例:
python
说明:from django.urls import path from . import views urlpatterns = [ path('books/', views.book_list, name='book-list'), path('books/<int:book_id>/', views.book_detail), ]
<int:book_id>
捕获整数参数,name
用于反向解析 URL。
三、常用函数与核心操作
1. ORM 数据库操作
函数/方法 | 功能描述 | 示例 |
---|---|---|
**objects.all() ** | 查询所有记录 | Book.objects.all() |
**objects.filter() ** | 条件筛选(支持链式调用) | Book.objects.filter(publish_date__year=2024) |
**objects.get() ** | 获取单条记录(无结果或多结果时抛出异常) | Book.objects.get(id=1) |
**objects.create() ** | 创建新记录 | Book.objects.create(title="狂人日记", author=author_obj) |
**save() ** | 保存模型实例修改 | book.title = "阿Q正传"; book.save() |
2. 路由与反向解析
- **
reverse()
**:通过视图名生成 URL,避免硬编码。python
from django.urls import reverse url = reverse('book-list', args=[5]) # 生成 '/books/5/'[8](@ref)
- **
include()
**:模块化路由配置,拆分多应用的路由。python
urlpatterns = [path('api/', include('api.urls'))]
3. 模板标签与过滤器
- **
{% extends "base.html" %}
**:继承基础模板布局。 - **
{% block content %}
**:定义可替换的内容区块。 - **
{{ value|lower }}
**:将变量转换为小写。 - **
{{ value|truncatechars:50 }}
**:截断字符串并添加省略号。
4. 管理后台(Admin)
- 注册模型:快速生成数据管理界面。
python
from django.contrib import admin admin.site.register(Book)
- 自定义界面:
python
class BookAdmin(admin.ModelAdmin): list_display = ('title', 'author', 'publish_date') search_fields = ('title', 'author__name')
5. 表单处理
- 表单类定义:自动生成 HTML 表单并验证数据。
python
from django import forms class BookForm(forms.ModelForm): class Meta: model = Book fields = ['title', 'author']
- 视图处理提交:
python
def add_book(request): if request.method == 'POST': form = BookForm(request.POST) if form.is_valid(): form.save() return redirect('book-list')
四、高级功能与扩展
1. 中间件(Middleware)
- 功能:拦截请求/响应,实现全局逻辑(如日志记录、权限验证)。
- 示例:自定义用户认证中间件。
2. 信号(Signals)
- 功能:监听模型事件(如保存、删除)触发回调函数。
python
from django.db.models.signals import post_save from django.dispatch import receiver @receiver(post_save, sender=Book) def notify_new_book(sender, instance, created, **kwargs): if created: send_email_to_subscribers(instance.title)
3. REST API 开发(DRF)
- 集成 Django REST Framework:快速构建 API 端点。
python
from rest_framework import serializers, viewsets class BookSerializer(serializers.ModelSerializer): class Meta: model = Book fields = '__all__' class BookViewSet(viewsets.ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer
五、应用场景
- 企业级后台系统:结合 Admin 和权限管理模块构建内部管理系统。
- 电商平台:通过 ORM 管理商品库存,模板系统生成动态页面。
- 数据可视化平台:集成 Pandas 和 Matplotlib,提供数据分析和图表展示。
- API 服务:使用 DRF 提供标准化接口,支持移动端和第三方调用。
六、注意事项
- 性能优化:
- 使用
select_related()
和prefetch_related()
减少数据库查询次数。 - 启用缓存(Redis/Memcached)加速高频数据访问。
- 使用
- 安全部署:
- 生产环境关闭
DEBUG
模式,防止敏感信息泄露。 - 定期更新依赖库,防范已知漏洞。
- 生产环境关闭