616 Django 快速开发¶
一句话概述:Django 是 Python 最成熟的全栈 Web 框架,"自带电池"——ORM、管理后台、认证、表单全都内置,适合快速构建完整的 Web 应用。
核心知识点速查表¶
| 知识点 | 说明 |
|---|---|
| 最新版本 | Django 6.0(2025年12月) |
| LTS版本 | Django 5.2(2025年4月,长期支持) |
| Python要求 | 3.12+(Django 6.0) |
| 架构模式 | MTV(Model-Template-View) |
| 数据库 | PostgreSQL、MySQL、SQLite、Oracle |
| 适用场景 | 全栈Web、CMS、电商、管理系统 |
一、安装配置¶
pip install django # 安装最新版 Django
# 创建项目
django-admin startproject mysite # 创建项目骨架
cd mysite
# 创建应用
python manage.py startapp blog # 创建 blog 应用
# 运行开发服务器
python manage.py runserver # 默认 http://127.0.0.1:8000/
1.1 项目结构¶
mysite/
├── manage.py # 管理命令入口
├── mysite/
│ ├── settings.py # 项目配置(数据库、中间件、应用等)
│ ├── urls.py # URL 路由配置
│ ├── wsgi.py # WSGI 部署入口
│ └── asgi.py # ASGI 部署入口(异步)
└── blog/
├── models.py # 数据模型(ORM)
├── views.py # 视图函数/类
├── urls.py # 应用级路由
├── admin.py # 管理后台配置
├── tests.py # 测试
└── templates/ # HTML 模板
二、基本使用¶
2.1 定义模型(ORM)¶
# blog/models.py
from django.db import models # 导入 ORM 基类
class Post(models.Model):
"""博客文章模型(白话:定义数据库表的结构)"""
title = models.CharField(max_length=200) # 标题,最长200字符
content = models.TextField() # 正文,不限长度
author = models.ForeignKey( # 外键关联用户表
'auth.User', on_delete=models.CASCADE # 用户删除时文章也删除
)
created_at = models.DateTimeField(auto_now_add=True) # 创建时间(自动填充)
updated_at = models.DateTimeField(auto_now=True) # 更新时间(每次保存自动更新)
published = models.BooleanField(default=False) # 是否发布
class Meta:
ordering = ['-created_at'] # 默认按创建时间倒序
def __str__(self):
return self.title # 管理后台显示标题
2.2 视图与路由¶
# blog/views.py
from django.http import JsonResponse
from django.shortcuts import render, get_object_or_404
from .models import Post
# 函数视图(简单场景)
def post_list(request):
"""文章列表"""
posts = Post.objects.filter(published=True) # ORM 查询:已发布的文章
data = [{"id": p.id, "title": p.title} for p in posts]
return JsonResponse(data, safe=False) # 返回 JSON
# 类视图(复杂场景)
from django.views.generic import ListView, DetailView
class PostListView(ListView):
model = Post # 关联模型
template_name = 'blog/post_list.html' # 模板文件
context_object_name = 'posts' # 模板中的变量名
queryset = Post.objects.filter(published=True) # 查询集
paginate_by = 10 # 每页10条
# blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('posts/', views.post_list, name='post-list'), # 列表
path('posts/<int:pk>/', views.post_detail, name='post-detail'), # 详情
]
# mysite/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls), # 管理后台
path('api/', include('blog.urls')), # 包含 blog 应用的路由
]
2.3 管理后台(Django 杀手级特性)¶
# blog/admin.py
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ['title', 'author', 'published', 'created_at'] # 列表显示字段
list_filter = ['published', 'created_at'] # 侧边栏过滤器
search_fields = ['title', 'content'] # 搜索字段
list_editable = ['published'] # 列表页可直接编辑
# 创建超级管理员
python manage.py createsuperuser # 按提示输入用户名/邮箱/密码
# 访问 http://localhost:8000/admin/ 进入管理后台
三、高级用法¶
3.1 Django REST Framework(DRF)¶
# pip install djangorestframework
# blog/serializers.py
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ['id', 'title', 'content', 'author', 'created_at']
# blog/views.py
from rest_framework import viewsets
from .models import Post
from .serializers import PostSerializer
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer # 自动提供 CRUD API
3.2 Django 6.0 新特性:后台任务¶
# Django 6.0 内置后台任务框架(不再必须用 Celery 做简单任务)
from django.tasks import task
@task
def send_welcome_email(user_id):
"""后台发送欢迎邮件"""
user = User.objects.get(id=user_id)
# 发送邮件逻辑...
四、常见报错与解决¶
4.1 迁移冲突¶
解决:python manage.py migrate --run-syncdb 或重建迁移。
4.2 静态文件404¶
解决:python manage.py collectstatic 收集静态文件。
4.3 CSRF 验证失败¶
解决:表单加 {% csrf_token %},API 可用 @csrf_exempt 装饰器。
五、速查表¶
| 操作 | 命令 |
|---|---|
| 创建项目 | django-admin startproject name |
| 创建应用 | python manage.py startapp name |
| 运行服务 | python manage.py runserver |
| 创建迁移 | python manage.py makemigrations |
| 执行迁移 | python manage.py migrate |
| 创建管理员 | python manage.py createsuperuser |
| 打开Shell | python manage.py shell |
| 收集静态文件 | python manage.py collectstatic |
| 运行测试 | python manage.py test |
六、同类工具对比¶
| 特性 | Django | FastAPI | Flask | Rails |
|---|---|---|---|---|
| 类型 | 全栈 | API框架 | 微框架 | 全栈 |
| ORM | 内置 | 无 | 无 | 内置 |
| 管理后台 | 内置 | 无 | 无 | 无 |
| 性能 | 中等 | 极高 | 中等 | 中等 |
| 学习曲线 | 中 | 低 | 低 | 中 |
| 适合场景 | 全栈应用 | API | 小项目 | 全栈应用 |
选型建议:需要管理后台+完整功能选 Django;纯 API 选 FastAPI;快速原型选 Flask。
参考资料:Django 官方文档 | Django REST Framework | GitHub