当前位置:首页 > 技术 > 正文内容

Django 框架核心开发流程与订单系统实现

访客 技术 2026年8月19日 1

1. Django 环境搭建与项目初始化

在开始 Django 开发之前,首先需要完成基础环境的安装。通过 pip 工具可以快速安装框架:

pip install django

创建项目可以通过命令行工具执行:

django-admin startproject my_project

在创建应用(App)时,建议根据业务逻辑划分模块。例如创建一个名为 core_module 的应用:

python manage.py startapp core_module

注意:新创建的应用必须在 settings.pyINSTALLED_APPS 中进行注册,否则 Django 的模型层(ORM)将无法识别并在数据库中生成对应的表结构。

2. 数据库配置与模型设计

Django 默认支持 MySQL 数据库。在 settings.py 中配置连接参数,并确保已安装驱动模块程序如 mysqlclient

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_business',
        'USER': 'db_user',
        'PASSWORD': 'password123',
        'HOST': '127.0.0.1',
        'PORT': 3306,
    }
}

models.py 中定义业务实体。以下是一个典型的订单系统模型示例,重构了字段逻辑:

from django.db import models

class SystemUser(models.Model):
    """系统管理员"""
    account = models.CharField(verbose_name="账号", max_length=32)
    secret_key = models.CharField(verbose_name="密钥", max_length=64)

    def __str__(self):
        return self.account

class SalesOrder(models.Model):
    """业务订单"""
    order_sn = models.CharField(verbose_name="流水号", max_length=64)
    product_name = models.CharField(verbose_name="商品名称", max_length=64)
    total_fee = models.DecimalField(verbose_name="金额", max_digits=10, decimal_places=2)

    PAYMENT_STATUS = (
        (0, "待核销"),
        (1, "已清算"),
    )
    state = models.SmallIntegerField(verbose_name="状态", choices=PAYMENT_STATUS, default=0)
    creator = models.ForeignKey(verbose_name="操作员", to="SystemUser", on_delete=models.CASCADE)

定义好模型后,通过执行迁移指令将结构映射到数据库:

python manage.py makemigrations
python manage.py migrate

3. 数据查询与 ORM 进阶

Django 的 ORM 提供了多种数据获取方式,根据不同的业务场景选择合适的返回类型:

获取单行对象:直接访问属性。

# 返回模型实例对象
record = SalesOrder.objects.filter(id=target_id).first()
print(record.order_sn)

获取字典格式:适用于 API 接口返回 JSON。

# 返回字典结构:{"order_sn": "...", "total_fee": ...}
data_map = SalesOrder.objects.filter(id=target_id).values("order_sn", "total_fee").first()

批量集合获取:

# 获取对象列表 [obj, obj, ...]
all_records = SalesOrder.objects.all()

# 获取指定字段的字典列表 [{}, {}, ...]
dict_list = SalesOrder.objects.all().values("id", "product_name")

# 获取元组列表 [(id, name), ...]
tuple_list = SalesOrder.objects.all().values_list("id", "product_name")

4. 业务逻辑核心组件

在完整的 Django 开发中,以下组件共同协作实现业务功能:

  • 路由系统(URLs):定义 URL 与视图函数的映射关系。
  • 视图(Views):处理请求逻辑,调用 ORM 操作数据,并返回响应。
  • 模板引擎(Templates):配合 Django 模板语言实现数据渲染,利用 {% extends %} 实现页面复用。
  • ModelForm:极大地简化了表单的 HTML 生成、数据校验及数据库持久化操作。
  • 会话管理:通过 Cookie 与 Session 机制记录用户登录状态,利用自定义中间件的 process_request 方法实现全局权限拦截。

5. 异步交互与数据可视化

现代 Web 开发通常采用 Ajax 技术实现页面的无刷新增删改查。前端通过 JavaScript 发起异步请求,后端处理后返回 JSON 数据,前端再动态更新 DOM。

对于经营分析类系统,数据可视化是重要一环。常用的图表库包括:

  • ECharts:由 Apache 基金会维护,国内生态丰富,配置项详尽,适合复杂的中文报表。
  • Highcharts:交互体验良好,适合国际化项目。

在 Django 中集成图表时,通常在后端通过 values() 聚合数据,转化为 JSON 格式后传递给前端渲染引擎。

标签: django

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。