Python开发从入门到精通:Web框架Django实战

Python开发从入门到精通:Web框架Django实战

Django 是 Python 生态里“电池齐全”的 Web 框架,2026 年 3 月当前最新稳定版是 Django 6.0.3(2025年12月发布的 6.0 系列,主流支持到 2026年8月,适合新项目)。

它在 5.x → 6.x 系列中进一步强化了 async 支持、类型注解、表单渲染、数据库函数、PostgreSQL 优化、安全默认值等,生产中用 Django + PostgreSQL + Celery + Redis + DRF 仍然是许多中大型项目的标配。

我们用实战导向的方式,从零到能独立开发一个完整中型项目(博客/任务管理/电商后台),分成清晰阶段。

阶段 0:准备工作(10–30 分钟)

# 推荐 Python 3.12 或 3.13(6.0 支持 3.12–3.14)
python --version

# 全局或虚拟环境都行,推荐 venv + pipx 或 poetry/uv
python -m venv venv-django
source venv-django/bin/activate   # Windows: venv-django\Scripts\activate

# 升级 pip 并安装最新 Django
pip install --upgrade pip
pip install Django==6.0.3

# 验证
django-admin --version   # 应显示 6.0.3

推荐工具链(2026主流)

  • 编辑器:VS Code + Python + Django + Ruff + isort + Black 插件
  • 依赖管理:uv / poetry(比 pip 快很多)
  • 数据库:PostgreSQL(本地用 Docker 跑)
  • 异步任务:Celery + Redis
  • API:Django REST Framework (DRF)

阶段 1:创建第一个项目 & 理解核心结构(1–2 小时)

# 创建项目(项目名建议小写+下划线)
django-admin startproject mysite

cd mysite

# 创建第一个 app(Django 一切从 app 开始)
python manage.py startapp blog

# 项目目录结构(重要!)
mysite/
├── manage.py
├── mysite/               # 项目配置
│   ├── __init__.py
│   ├── asgi.py           # 异步入口(Django 4+ 加强)
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── blog/                 # 业务 app
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations/
    ├── models.py
    ├── tests.py
    └── views.py

核心文件速记

文件作用常见修改点
settings.py配置中心INSTALLED_APPS、DATABASES、MIDDLEWARE、TEMPLATES、STATIC 等
urls.py路由总表include() 引入 app 的 urls
models.py数据模型(ORM)定义 Model 类
views.py视图(逻辑)函数视图 / 类视图 / APIView
admin.py后台管理注册admin.site.register(Model)
migrations/数据库迁移文件makemigrations + migrate

第一步运行起来

# mysite/settings.py 中添加 app
INSTALLED_APPS = [
    ...,
    'blog.apps.BlogConfig',
]

# blog/views.py
from django.http import HttpResponse

def home(request):
    return HttpResponse("<h1>Hello Django 6.0 in 2026!</h1>")

# blog/urls.py(新建)
from django.urls import path
from .views import home

urlpatterns = [
    path('', home, name='home'),
]

# mysite/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]

# 启动(默认 8000 端口)
python manage.py runserver

浏览器打开 http://127.0.0.1:8000/ 看到 Hello 就算入门成功。

阶段 2:模型 & 数据库 & 迁移(核心,2–4 小时)

# blog/models.py
from django.db import models
from django.utils import timezone

class Category(models.Model):
    name = models.CharField(max_length=100, unique=True)
    slug = models.SlugField(max_length=120, unique=True)

    class Meta:
        verbose_name_plural = "Categories"

    def __str__(self):
        return self.name

class Post(models.Model):
    title = models.CharField(max_length=200)
    slug = models.SlugField(max_length=250, unique=True)
    content = models.TextField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='posts')
    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    created_at = models.DateTimeField(default=timezone.now)
    updated_at = models.DateTimeField(auto_now=True)
    is_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

# 创建超级用户(进 admin)
python manage.py createsuperuser

# 注册模型到 admin
# blog/admin.py
from django.contrib import admin
from .models import Category, Post

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ('name', 'slug')
    prepopulated_fields = {'slug': ('name',)}

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'category', 'author', 'is_published', 'created_at')
    list_filter = ('is_published', 'category')
    search_fields = ('title', 'content')
    prepopulated_fields = {'slug': ('title',)}
    date_hierarchy = 'created_at'

访问 http://127.0.0.1:8000/admin/ 登录后就能管理文章了。

阶段 3:视图 & 模板 & URL(2–4 小时)

类视图(更推荐,DRY):

# blog/views.py
from django.views.generic import ListView, DetailView
from .models import Post

class PostListView(ListView):
    model = Post
    template_name = 'blog/post_list.html'  # 默认是 blog/post_list.html
    context_object_name = 'posts'
    queryset = Post.objects.filter(is_published=True)

class PostDetailView(DetailView):
    model = Post
    template_name = 'blog/post_detail.html'
    slug_field = 'slug'
    slug_url_kwarg = 'slug'

URL 配置

# blog/urls.py
from django.urls import path
from .views import PostListView, PostDetailView

urlpatterns = [
    path('', PostListView.as_view(), name='post_list'),
    path('<slug:slug>/', PostDetailView.as_view(), name='post_detail'),
]

创建模板(mysite/templates/blog/ 下):

post_list.html 示例:

<!DOCTYPE html>
<html>
<head>
    <title>我的博客</title>
</head>
<body>
    <h1>最新文章</h1>
    <ul>
    {% for post in posts %}
        <li><a href="{% url 'post_detail' post.slug %}">{{ post.title }}</a> - {{ post.created_at|date:"Y-m-d" }}</li>
    {% empty %}
        <li>暂无文章</li>
    {% endfor %}
    </ul>
</body>
</html>

阶段 4:进阶实战方向(推荐顺序)

  1. 表单 & CBV Create/Update/Delete → 用 CreateViewUpdateViewDeleteView
  2. 用户认证LoginViewLogoutViewUserCreationForm + @login_required
  3. 静态文件 & 媒体文件 → settings 中配置 STATIC_URL / MEDIA_URL + collectstatic
  4. Django REST Framework → 序列化器 + ViewSet + Router → 快速出 API
  5. 异步视图(Django 6.0 更友好)→ async def + database_async
  6. 部署 → Docker + Gunicorn/Uvicorn + Nginx + PostgreSQL + Supervisor/ systemd
  7. 测试 → unittest / pytest-django + factory_boy
  8. 性能优化 → select_related / prefetch_related、缓存(Redis)、debug-toolbar

2026 年 Django 项目最佳实践速查(生产级)

  • Poetry / uv 管理依赖
  • settings 用 split(base/dev/prod)+ django-environ / pydantic-settings
  • 模型:slug 自动生成、timestamps 用 timezone.now
  • 视图:优先 Class-Based Views + mixins
  • 模板:用 django-crispy-formsdjango-tailwind
  • 安全:SECURE_* 设置全开、django-cors-headers、django-axes
  • 日志:structlog 或 logging + sentry-sdk
  • CI/CD:GitHub Actions + pre-commit(black、ruff、isort)

你现在是零基础刚接触 Django,还是已经有 Python 基础想直接做项目?
想重点从哪个阶段开始实战(比如先做一个带用户登录的 TODO List,还是直接上 DRF API)?

告诉我你的目标和当前水平,我可以给你贴出下一段完整可运行代码 + 数据库设计 + 常见坑点。

文章已创建 4915

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部