跳转至

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              # 管理后台显示标题
# 数据库迁移
python manage.py makemigrations blog   # 生成迁移文件
python manage.py migrate               # 执行迁移(创建/修改表)

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 迁移冲突

django.db.migrations.exceptions.InconsistentMigrationHistory

解决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
打开Shellpython manage.py shell
收集静态文件python manage.py collectstatic
运行测试python manage.py test

六、同类工具对比

特性DjangoFastAPIFlaskRails
类型全栈API框架微框架全栈
ORM内置内置
管理后台内置
性能中等极高中等中等
学习曲线
适合场景全栈应用API小项目全栈应用

选型建议:需要管理后台+完整功能选 Django;纯 API 选 FastAPI;快速原型选 Flask。


参考资料Django 官方文档 | Django REST Framework | GitHub