跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Python

Django Web 框架实战:从基础配置到产品管理系统

Django 框架提供 ORM、模板引擎等内置功能,支持快速构建安全 Web 应用。本文涵盖安装、项目结构、模型定义、视图函数、表单处理及路由配置,并通过产品管理系统案例演示认证与权限管理。适合希望掌握 Django 核心流程的开发者参考。

FrontendX发布于 2026/3/22更新于 2026/4/293 浏览
Django Web 框架实战:从基础配置到产品管理系统

Django Web 框架实战指南

学习目标

掌握 Django 框架的核心功能,包括模型、视图、模板、表单、认证及权限管理;理解其 MVT 架构;通过实战案例开发一个完整的产品管理系统。

Django 框架概述

什么是 Django

Django 是一个开源的 Python Web 框架,遵循 MVT(Model-View-Template)架构,提供了完整的 Web 开发解决方案,涵盖数据库操作、表单处理、用户认证等。

核心特点

  • 快速开发:内置 ORM、模板引擎和表单处理,大幅减少重复代码。
  • 安全性:原生支持 CSRF 保护、XSS 防护及 SQL 注入防御。
  • 可扩展性:插件化设计,拥有庞大的第三方库生态。
  • 文档完善:官方文档详尽,示例丰富。

安装环境

pip install django

创建项目与应用

初始化项目

使用 django-admin 创建项目骨架:

django-admin startproject myproject
cd myproject

创建应用

在项目中添加具体业务模块:

python manage.py startapp myapp

项目结构概览

myproject/
├── manage.py
├── myapp/
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations/
│   ├── models.py
│   ├── tests.py
│   └── views.py
└── myproject/
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

模型定义与迁移

定义数据模型

在 models.py 中定义数据结构。注意类名首字母大写,字段类型需准确。

# myapp/models.py
from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    description = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

数据库迁移

修改模型后,需生成并应用迁移文件:

python manage.py makemigrations
python manage.py migrate

视图函数实现

视图负责处理请求逻辑。我们通常使用函数视图(FBV)来演示流程。

基础 CRUD 视图

# myapp/views.py
from django.shortcuts import render, get_object_or_404, redirect
from myapp.models import Product
from myapp.forms import ProductForm

def product_list(request):
    products = Product.objects.all()
    return render(request, 'myapp/product_list.html', {'products': products})

def product_detail(request, product_id):
    product = get_object_or_404(Product, pk=product_id)
    return render(request, 'myapp/product_detail.html', {'product': product})

def product_create(request):
    if request.method == 'POST':
        form = ProductForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('product_list')
    else:
        form = ProductForm()
    return render(request, 'myapp/product_form.html', {'form': form})

def product_update(request, product_id):
    product = get_object_or_404(Product, pk=product_id)
    if request.method == 'POST':
        form = ProductForm(request.POST, instance=product)
        if form.is_valid():
            form.save()
            return redirect('product_list')
    else:
        form = ProductForm(instance=product)
    return render(request, 'myapp/product_form.html', {'form': form})

def product_delete(request, product_id):
    product = get_object_or_404(Product, pk=product_id)
    if request.method == 'POST':
        product.delete()
        return redirect('product_list')
    return render(request, 'myapp/product_delete.html', {'product': product})

表单处理

利用 ModelForm 可以快速生成基于模型的表单,自动处理验证逻辑。

# myapp/forms.py
from django import forms
from myapp.models import Product

class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = ['name', 'price', 'description']

模板渲染

模板层负责展示。这里使用 Bootstrap 简化样式,并通过 {% extends %} 复用基础布局。

基础布局 (base.html)

<!-- myapp/templates/myapp/base.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{% block title %}产品管理系统{% endblock %}</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css">
</head>
<body>
    <nav class="navbar navbar-expand-lg navbar-light bg-light">
        <a class="navbar-brand" href="{% url 'product_list' %}">产品管理系统</a>
        <div class="collapse navbar-collapse">
            <ul class="navbar-nav mr-auto">
                <li class="nav-item"><a class="nav-link" href="{% url 'product_list' %}">产品列表</a></li>
                <li class="nav-item"><a class="nav-link" href="{% url 'product_create' %}">添加产品</a></li>
            </ul>
        </div>
    </nav>
    <div class="container mt-4"> {% block content %}{% endblock %} </div>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

产品列表页

<!-- myapp/templates/myapp/product_list.html -->
{% extends 'myapp/base.html' %}
{% block title %}产品列表{% endblock %}
{% block content %}
<h1>产品列表</h1>
<table class="table table-striped">
    <thead><tr><th>名称</th><th>价格</th><th>描述</th><th>创建时间</th><th>操作</th></tr></thead>
    <tbody>
        {% for product in products %}
        <tr>
            <td>{{ product.name }}</td>
            <td>{{ product.price }}</td>
            <td>{{ product.description }}</td>
            <td>{{ product.created_at }}</td>
            <td>
                <a href="{% url 'product_detail' product.id %}" class="btn btn-primary btn-sm">查看</a>
                <a href="{% url 'product_update' product.id %}" class="btn btn-secondary btn-sm">编辑</a>
                <a href="{% url 'product_delete' product.id %}" class="btn btn-danger btn-sm">删除</a>
            </td>
        </tr>
        {% endfor %}
    </tbody>
</table>
{% endblock %}

路由配置

应用路由 (myapp/urls.py)

from django.urls import path
from myapp import views

urlpatterns = [
    path('', views.product_list, name='product_list'),
    path('product/<int:product_id>/', views.product_detail, name='product_detail'),
    path('product/create/', views.product_create, name='product_create'),
    path('product/<int:product_id>/update/', views.product_update, name='product_update'),
    path('product/<int:product_id>/delete/', views.product_delete, name='product_delete'),
]

项目路由 (myproject/urls.py)

from django.contrib import admin
from django.urls import path, include

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

用户认证与权限管理

配置认证系统

确保 settings.py 中包含必要的中间件和应用:

# myproject/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

创建超级用户

python manage.py createsuperuser

后台管理注册

# myapp/admin.py
from django.contrib import admin
from myapp.models import Product

@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display = ['name', 'price', 'description', 'created_at', 'updated_at']
    list_filter = ['created_at']
    search_fields = ['name', 'description']

静态文件管理

配置静态文件路径

# myproject/settings.py
import os
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),]

模板中加载

{% load static %}
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">

实战案例:产品管理系统

需求分析

构建一个支持以下功能的管理系统:

  • 产品的增删改查及分类关联。
  • 用户登录验证与权限控制。
  • 产品名称搜索功能。

进阶模型定义

引入分类表,建立多对一关系。

# myapp/models.py
from django.db import models
from django.contrib.auth.models import User

class Category(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

class Product(models.Model):
    name = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    description = models.TextField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

搜索功能实现

在视图中获取查询参数,过滤结果。

# myapp/views.py
from django.shortcuts import render, get_object_or_404, redirect
from myapp.models import Product, Category
from myapp.forms import ProductForm, CategoryForm
from django.contrib.auth.decorators import login_required

def product_list(request):
    search_query = request.GET.get('search', '')
    products = Product.objects.filter(name__icontains=search_query)
    return render(request, 'myapp/product_list.html', {'products': products, 'search_query': search_query})

@login_required
def product_create(request):
    # ... 省略部分代码,逻辑同上
    pass

实施步骤总结

  1. 搭建项目与环境。
  2. 定义模型并迁移数据库。
  3. 编写视图与表单逻辑。
  4. 配置 URL 路由与模板。
  5. 启用认证与权限装饰器。
  6. 启动服务测试功能。

总结

本文详细介绍了 Django 框架的核心组件,从模型定义到视图逻辑,再到前端模板交互。通过产品管理系统的实战演练,展示了如何结合分类管理与搜索功能构建完整应用。建议读者在实际操作中多尝试修改代码,深入理解各模块间的协作机制。

目录

  1. Django Web 框架实战指南
  2. 学习目标
  3. Django 框架概述
  4. 什么是 Django
  5. 核心特点
  6. 安装环境
  7. 创建项目与应用
  8. 初始化项目
  9. 创建应用
  10. 项目结构概览
  11. 模型定义与迁移
  12. 定义数据模型
  13. myapp/models.py
  14. 数据库迁移
  15. 视图函数实现
  16. 基础 CRUD 视图
  17. myapp/views.py
  18. 表单处理
  19. myapp/forms.py
  20. 模板渲染
  21. 基础布局 (base.html)
  22. 产品列表页
  23. 路由配置
  24. 应用路由 (myapp/urls.py)
  25. 项目路由 (myproject/urls.py)
  26. 用户认证与权限管理
  27. 配置认证系统
  28. myproject/settings.py
  29. 创建超级用户
  30. 后台管理注册
  31. myapp/admin.py
  32. 静态文件管理
  33. 配置静态文件路径
  34. myproject/settings.py
  35. 模板中加载
  36. 实战案例:产品管理系统
  37. 需求分析
  38. 进阶模型定义
  39. myapp/models.py
  40. 搜索功能实现
  41. myapp/views.py
  42. 实施步骤总结
  43. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • FAIR plus 机器人全产业链接会:链动全球智能新机遇
  • Python GUI 可视化设计工具 tkinter-helper 介绍
  • 主流 AI 编程工具定价对比:Cursor、Windsurf、Kiro、Zed 与 VS Code
  • 医疗 AI 中的模型融合与集成策略实战
  • OpenClaw 接入飞书机器人与 Kimi2.5 配置指南
  • 9 款提升效率的 PyCharm 实用插件推荐
  • 前端状态管理对比:如何选择合适的方案
  • KANASS 与 SOULAR 集成实现统一登录配置指南
  • Docker 实战:修改 docker0 网桥默认 IP 地址
  • 电商 AI 绘画:精准提示词撰写与实战案例指南
  • 国企合同工三年的工作回忆与思考
  • AR眼镜光学镜头设计实例与核心技巧解析
  • 电商策略自动化系统:结合数据采集与 AI 的分析实践
  • AI 绘画提示词工程实践:安全合规与过滤机制
  • 机器人动力学:牛顿欧拉法推导与详解
  • Ubuntu 22.04 安装配置 OpenClaw 实战指南
  • Python 深度学习环境搭建:Anaconda、PyTorch GPU 版与 PyCharm 配置
  • 小米智能家居接入 Home Assistant 实战指南
  • FAST_LIO 与 FAST_LIO2 算法原理及 ROS2 环境复现
  • 基于 Java Swing 的个人所得税计算模拟器源码

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online