跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python大前端

Django Web 框架实战:从零构建产品管理系统

Django 框架提供了完整的 Web 开发解决方案,涵盖模型、视图、模板及认证系统。本教程通过搭建产品管理系统,演示了项目初始化、ORM 建模、表单处理、路由配置及权限管理的完整流程。结合 Bootstrap 实现响应式界面,重点讲解如何利用 Django 快速构建安全、可扩展的后端服务,适合希望掌握全栈 Web 开发的开发者参考。

魔尊发布于 2026/3/27更新于 2026/8/2143 浏览
Django Web 框架实战:从零构建产品管理系统

Django Web 框架实战指南

项目示意图

Django 是一个开源的 Python Web 框架,遵循 MVC(Model-View-Controller)架构,提供了完整的 Web 开发解决方案。它内置了数据库操作、表单处理、用户认证和权限管理等功能,非常适合快速构建安全、可扩展的后端服务。

为什么选择 Django

在实际开发中,我们往往需要兼顾开发效率和系统安全性。Django 的优势在于:

  • 快速开发:丰富的 ORM、模板引擎和表单组件能大幅减少重复代码。
  • 安全性强:内置 CSRF 保护、XSS 防护和 SQL 注入防御机制。
  • 生态完善:支持插件化扩展,拥有大量成熟的第三方库。
环境准备

确保已安装 Python 环境,然后通过 pip 安装 Django:

pip install django

项目初始化与结构

创建一个新项目后,目录结构大致如下。理解这个结构对于后续维护至关重要。

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

使用 django-admin startproject 创建项目,再用 python manage.py startapp 创建应用模块。在 settings.py 中注册你的应用是启动的第一步。

模型定义与数据库迁移

模型层负责数据持久化。以产品管理为例,我们需要定义产品表和分类表。

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

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

修改模型后,记得执行迁移命令来同步数据库:

python manage.py makemigrations
python manage.py migrate

视图与业务逻辑

视图函数处理请求并返回响应。为了保持代码整洁,我们通常将业务逻辑封装在视图中,利用 Django 的 render 和 get_object_or_404 简化流程。

# 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):
    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})

注意 @login_required 装饰器,它能自动拦截未登录用户的访问,这是实现权限控制最简单的方式。

表单处理

Django 的 ModelForm 能自动生成基于模型的表单,极大减少了 HTML 输入框的编写工作。

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

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

在视图中实例化表单时,根据请求方法(GET 或 POST)决定是展示空表单还是验证提交的数据。

模板渲染

模板层负责展示。我们使用 Django 模板语言结合 Bootstrap 来实现响应式界面。

<!-- myapp/templates/myapp/base.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <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>
    </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>

通过 {% extends %} 继承基础布局,子模板只需关注具体内容的填充,这样能避免重复编写导航栏和页脚。

路由配置

URL 映射将请求分发到对应的视图函数。应用级和项目级的路由需要分别配置。

# myapp/urls.py
from django.urls import path
from myapp import views

urlpatterns = [
    path('', views.product_list, name='product_list'),
    path('product/create/', views.product_create, name='product_create'),
    # ... 其他路径
]

在项目根目录的 urls.py 中包含应用路由:

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

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

用户认证与静态文件

Django 自带强大的认证系统。在 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',
]

静态文件(如 CSS、JS)需单独配置,以便在生产环境中正确加载。

实战总结

通过上述步骤,我们完成了一个具备增删改查、分类管理及搜索功能的产品管理系统。核心要点包括:

  1. 模型设计:合理定义外键关系,确保数据完整性。
  2. 视图逻辑:利用装饰器控制权限,分离 GET/POST 请求处理。
  3. 前端交互:结合 Bootstrap 提升用户体验,使用模板继承复用代码。
  4. 安全机制:开启 CSRF 保护,使用参数化查询防止注入。

实际开发中,建议多参考官方文档,针对具体业务场景调整模型和视图。掌握这些基础后,构建更复杂的 Web 应用将变得轻松许多。

目录

  1. Django Web 框架实战指南
  2. 为什么选择 Django
  3. 环境准备
  4. 项目初始化与结构
  5. 模型定义与数据库迁移
  6. myapp/models.py
  7. 视图与业务逻辑
  8. myapp/views.py
  9. 表单处理
  10. myapp/forms.py
  11. 模板渲染
  12. 路由配置
  13. myapp/urls.py
  14. myproject/urls.py
  15. 用户认证与静态文件
  16. myproject/settings.py
  17. 实战总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • OpenClaw 本地部署、隧道映射与大模型接入指南
  • MATLAB 实现基于 DQN-MLP 的无人机三维路径规划
  • VR/AR/MR 技术解析:三种虚实交互技术的核心区别
  • Python Requests 爬虫入门实战:GET/POST 请求与反爬绕过
  • Copilot 人工智能助手功能与版本介绍
  • 马尔可夫决策过程 (MDP) 原理与代码实战案例
  • 项目管理基础:核心定义、干系人与九大知识域
  • 二分查找实战:旋转数组最小值与缺失数字查找
  • Python 学习路线与方法总结
  • Neo4j 图数据库核心概念与在线控制台使用指南
  • 利用大型语言模型自动构建知识图谱
  • OpenClaw 的 SOUL.md:用自然语言定义 AI 代理身份与行为边界
  • Supabase 全栈开发实战:从入门到本地部署
  • MySQL 基础概念与核心语法详解
  • GitHub Copilot Token 消耗过快:5 种节省策略与 Claude 模型替代方案
  • deepyr 鸿蒙化适配指南:基于 Jaspr 构建类型安全 Web 应用
  • Python性能分析:从cProfile到火焰图,精准定位性能瓶颈
  • Code Llama 7B 使用指南:环境搭建与代码生成
  • Web 自动化测试入门:Selenium 核心原理与实战脚本
  • OpenHarmony 开发:使用 Jaspr 构建轻量级 Dart Web 应用

相关免费在线工具

  • 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