当前位置: 首页 > news >正文

Django图书商城系统实战开发-实现商品管理

Django图书商城系统实战开发 - 实现商品管理

在本教程中,我们将使用Django框架来实现一个简单的图书商城系统,并重点讨论如何实现商品管理功能。此外,我们还将介绍如何使用Markdown格式来写博客,并将其集成到我们的图书商城系统中。

介绍

Django是一个强大的Python Web框架,被广泛应用于开发各种类型的Web应用程序,包括电子商务平台。图书商城系统是一个常见的示例,涉及许多常见的Web开发需求,例如用户认证、商品管理、购物车功能等。

在本教程中,我们将着重讨论商品管理功能。商品管理是任何电子商务系统的核心,它允许管理员对商城中的商品进行创建、编辑、删除和展示等操作。我们将使用Django的模型和视图来处理这些操作,并通过简单的界面让管理员能够轻松管理商品。

准备工作

在开始之前,确保您已经安装了Python和Django。您可以通过以下命令检查是否已安装:

python --version
django-admin --version

如果以上命令成功执行并显示正确的版本号,则说明您已正确安装了Python和Django。

创建Django项目和应用

首先,让我们创建一个新的Django项目和一个名为bookstore的应用程序。打开命令行终端并执行以下命令:

django-admin startproject mybookstore
cd mybookstore
python manage.py startapp bookstore

以上命令将创建一个名为mybookstore的Django项目和一个名为bookstore的应用程序。

定义数据模型

在我们开始实现商品管理功能之前,我们首先需要定义商品的数据模型。在bookstore应用程序的models.py文件中,添加以下代码:

from django.db import modelsclass Category(models.Model):name = models.CharField(max_length=100)def __str__(self):return self.nameclass Book(models.Model):title = models.CharField(max_length=200)author = models.CharField(max_length=200)price = models.DecimalField(max_digits=6, decimal_places=2)description = models.TextField()category = models.ForeignKey(Category, on_delete=models.CASCADE)def __str__(self):return self.title

以上代码定义了两个模型:CategoryBookCategory模型用于存储商品分类信息,Book模型用于存储商品详细信息,并与Category模型建立了一对多的关系。

创建数据库表

在定义完数据模型后,我们需要通过Django的迁移功能自动生成数据库表。在命令行终端中执行以下命令:

python manage.py makemigrations
python manage.py migrate

以上命令将自动生成对应的迁移文件,并在数据库中创建相应的表。

创建商品管理视图

接下来,我们将实现商品管理的视图部分。在bookstore应用程序的views.py文件中,添加以下代码:

from django.shortcuts import render
from .models import Bookdef book_list(request):books = Book.objects.all()return render(request, 'bookstore/book_list.html', {'books': books})

以上代码定义了一个名为book_list的视图函数,它从数据库中获取所有的商品,并将其传递给一个模板文件进行展示。

创建商品列表模板

bookstore应用程序的templates目录下,创建一个名为book_list.html的模板文件,并添加以下代码:

{% for book in books %}<div><h2>{{ book.title }}</h2><p>Author: {{ book.author }}</p><p>Price: {{ book.price }}</p><p>Description: {{ book.description }}</p><p>Category: {{ book.category }}</p></div>
{% endfor %}

Django图书商城系统实战开发 - 实现商品管理

介绍

在本文中,我们将实现一个基于Django的图书商城系统,重点是实现商品管理功能。我们将使用Django框架来构建整个应用程序,并使用SQLite数据库来存储商品信息。

本文将以步骤指导您完成以下任务:

  1. 设置Django项目和应用程序
  2. 创建商品模型和数据库表
  3. 实现商品列表页面
  4. 实现商品添加页面
  5. 实现商品编辑和删除功能
  6. 配置URL路由和运行项目

步骤1:设置Django项目和应用程序

首先,确保您已经在系统中安装了Django。如果尚未安装,请在命令行中运行以下命令进行安装:

pip install django

创建一个名为mybookstore的Django项目:

django-admin startproject mybookstore

接下来,进入项目目录:

cd mybookstore

创建一个名为bookstore的Django应用程序:

python manage.py startapp bookstore

现在,我们已经设置好了Django项目和应用程序的基本结构。

步骤2:创建商品模型和数据库表

bookstore应用程序的models.py文件中,定义一个名为Book的商品模型,包含商品的标题、作者、价格、描述和分类字段:

from django.db import modelsclass Book(models.Model):title = models.CharField(max_length=100)author = models.CharField(max_length=100)price = models.DecimalField(max_digits=6, decimal_places=2)description = models.TextField()category = models.CharField(max_length=50)def __str__(self):return self.title

这个模型定义了一个名为Book的数据库表,它有五个字段:titleauthorpricedescriptioncategory__str__方法用于在对象的字符串表示中返回title字段的值。

接下来,运行以下命令生成数据库迁移文件:

python manage.py makemigrations

然后,运行数据库迁移命令以创建实际的数据库表:

python manage.py migrate

现在,我们已经创建了一个名为Book的数据库表。

步骤3:实现商品列表页面

bookstore应用程序的views.py文件中,定义一个名为book_list的视图函数,用于渲染商品列表页面:

from django.shortcuts import render
from .models import Bookdef book_list(request):books = Book.objects.all()return render(request, 'bookstore/book_list.html', {'books': books})

这个视图函数从数据库中检索所有的商品,并将它们传递给book_list.html模板进行渲染。

现在,我们需要创建一个名为book_list.html的模板,在bookstore应用程序的templates/bookstore目录下。在模板中,我们将使用Django的模板语言来动态显示商品的相关信息:

{% for book in books %}<div><h2>{{ book.title }}</h2><p>Author: {{ book.author }}</p><p>Price: {{ book.price }}</p><p>Description: {{ book.description }}</p><p>Category: {{ book.category }}</p></div>
{% endfor %}

在循环中,我们遍历所有的商品,并显示它们的标题、作者、价格、描述和分类。

步骤4:实现商品添加页面

bookstore应用程序的views.py文件中,定义一个名为book_add的视图函数,用于渲染商品添加页面:

from django.shortcuts import render, redirect
from .forms import BookFormdef book_add(request):if request.method == 'POST':form = BookForm(request.POST)if form.is_valid():form.save()return redirect('book_list')else:form = BookForm()return render(request, 'bookstore/book_add.html', {'form': form})

这个视图函数处理POST请求时,将从表单中获取商品信息,并将其保存到数据库中。如果表单数据有效,则重定向到商品列表页面。否则,重新渲染添加页面,并显示表单错误信息。

接下来,我们需要创建一个名为book_add.html的模板,在bookstore应用程序的templates/bookstore目录下。在模板中,我们将使用Django的表单功能来生成商品添加表单:

<form method="post">{% csrf_token %}{{ form.as_p }}<input type="submit" value="Add Book">
</form>

这个模板中的form.as_p将生成一个简单的包含表单字段的HTML表单。

步骤5:实现商品编辑和删除功能

bookstore应用程序的views.py文件中,定义两个视图函数:book_editbook_delete,用于渲染商品编辑和删除页面:

from django.shortcuts import get_object_or_404def book_edit(request, pk):book = get_object_or_404(Book, pk=pk)if request.method == 'POST':form = BookForm(request.POST, instance=book)if form.is_valid():form.save()return redirect('book_list')else:form = BookForm(instance=book)return render(request, 'bookstore/book_edit.html', {'form': form})def book_delete(request, pk):book = get_object_or_404(Book, pk=pk)if request.method == 'POST':book.delete()return redirect('book_list')return render(request, 'bookstore/book_delete.html', {'book': book})

这些视图函数使用get_object_or_404方法获取要编辑或删除的商品对象。如果是POST请求,它们将更新或删除商品并重定向到商品列表页面。

创建book_edit.htmlbook_delete.html模板,并在相应的模板中显示编辑和删除表单。

步骤6:配置URL路由和运行项目

最后,我们需要配置URL路由,将这些视图函数与相应的URL模式匹配起来。

mybookstore项目的urls.py文件中,添加以下代码:

from django.urls import path
from bookstore.views import book_list, book_add, book_edit, book_deleteurlpatterns = [path('books/', book_list, name='book_list'),path('books/add/', book_add, name='book_add'),path('books/edit/<int:pk>/', book_edit, name='book_edit'),path('books/delete/<int:pk>/', book_delete, name='book_delete'),
]

这些URL模式将分别匹配商品列表、商品添加、商品编辑和商品删除页面,并将相应的视图函数与之关联。

现在,我们可以运行Django开发服务器,并访问我们的图书商城系统了:

python manage.py runserver

在浏览器中访问http://localhost:8000/books/,您将看到商品列表页面。您可以添加、编辑和删除商品,并在列表页面上看到更新后的结果。

结论

在本文中,我们实现了一个基于Django的图书商城系统,并重点介绍了商品管理功能。通过学习这个实战示例,您可以了解如何使用Django框架来构建功能强大的Web应用程序,并通过操作数据库来实现商品的增加、编辑和删除功能。

虽然本文只涵盖了商品管理的基本功能,但您可以根据自己的需求扩展和改进这个系统。希望您通过这个实例能够提升对Django开发的理解和能力。

相关文章:

Django图书商城系统实战开发-实现商品管理

Django图书商城系统实战开发 - 实现商品管理 在本教程中&#xff0c;我们将使用Django框架来实现一个简单的图书商城系统&#xff0c;并重点讨论如何实现商品管理功能。此外&#xff0c;我们还将介绍如何使用Markdown格式来写博客&#xff0c;并将其集成到我们的图书商城系统中…...

走出象牙塔:李郓梁的区块链实践之路丨对话MVP

如何从科研走向实践&#xff1f;李郓梁在社区找到了答案。 作为西安工业大学的硕士研究生&#xff0c;李郓梁从学校的实验室接触区块链技术。通过研读大量论文&#xff0c;李郓梁为区块链多中心化、不可篡改等前沿理论深深着迷&#xff0c;并选择将区块链作为主要研究方向&…...

【hive】hive分桶表的学习

hive分桶表的学习 前言&#xff1a; 每一个表或者分区&#xff0c;hive都可以进一步组织成桶&#xff0c;桶是更细粒度的数据划分&#xff0c;他本质不会改变表或分区的目录组织方式&#xff0c;他会改变数据在文件中的分布方式。 分桶规则&#xff1a; 对分桶字段值进行哈…...

ReactDOM模块react-dom/client没有默认导出报错解决办法

import ReactDOM 模块“"E:/Dpandata/Shbank/rt-pro/node_modules/.pnpm/registry.npmmirror.comtypesreact-dom18.2.7/node_modules/types/react-dom/client"”没有默认导出。 解决办法 只需要在tsconfig.json里面添加配置 "esModuleInterop": true 即…...

TiDB数据库的安装配置

一、 TiDB 软件和硬件环境建议配置 Linux 操作系统版本要求 Linux 操作系统 版本 Red Hat Enterprise Linux 7.3 及以上的 7.x 版本 CentOS 7.3 及以上的 7.x 版本 Oracle Enterprise Linux 7.3 及以上的 7.x 版本 Amazon Linux 2 Ubuntu LTS 16.04 及以上的版本 …...

Unity智慧园区夜景制作

近期使用Unity做了一个智慧园区场景的demo&#xff0c;初步了解了3D开发的一些步骤和知识&#xff0c;以下为制作的步骤&#xff0c;比较简略&#xff0c;备忘&#xff1a; 1. 制作前的设计分析&#xff1a; 1. 分析日光角度&#xff0c;阴影长度&#xff0c;效果 2. 分析冷暖…...

Linux MQTT智能家居项目(LED界面的布局设置)

文章目录 前言一、LED界面布局准备工作二、LED界面布局三、逻辑实现总结 前言 上篇文章我们完成了主界面的布局设置那么这篇文章我们就来完成各个界面的布局设置吧。 一、LED界面布局准备工作 首先添加LED灯光控制的图标。 将选择好的LED图标添加进来&#xff1a; 图标可以…...

LeetCode 160.相交链表

文章目录 &#x1f4a1;题目分析&#x1f4a1;解题思路&#x1f6a9;步骤一&#xff1a;找尾节点&#x1f6a9;步骤二&#xff1a;判断尾节点是否相等&#x1f6a9;步骤三&#xff1a;找交点&#x1f344;思路1&#x1f344;思路2 &#x1f514;接口源码 题目链接&#x1f449;…...

【深度学习_TensorFlow】调用keras高层API重写手写数字识别项目

写在前面 上一阶段我们完成了手写数字识别项目的构建&#xff0c;了解了网络构建、训练、测试的基本流程&#xff0c;但是对于一些常见的操作&#xff0c;因其使用过于频繁&#xff0c;实际上并无必要手动实现&#xff0c;而早已被封装为函数了。 这篇文章我们将了解keras高层…...

柔性数组(C语言)

也许你从来没有听说过柔性数组&#xff08; flexible array &#xff09;这个概念&#xff0c;但是它确实是存在的。 C99 中&#xff0c;结构中的最后一个元素允许是未知大小的数组&#xff0c;这就叫做柔性数组成员&#xff0c;但结 构中的柔性数组成员前面必须至少一个其他…...

判断推理 -- 图形推理 -- 属性规律

中心对称&#xff1a;取一个点&#xff0c;穿过中心能找到另一个对称点。把轴对称 中心对称标出来。五角星不是中心对称。 BD对称轴方向相同&#xff0c;但135自带对称轴&#xff0c;24没带&#xff0c;所以6应该不带对称轴。 百分号不是轴对称。 白色对称轴 平行 或者 夹角…...

【注解使用】使用@Autowired后提示:Field injection is not recommended(Spring团队不推荐使用Field注入)

问题发生场景&#xff1a; 在使用 IDEA 开发 SpringBoot 项目时&#xff0c;在 Controller 类中使用注解 Autowired 注入一个依赖出现了警告提示&#xff0c;查看其他使用该注解的地方同样出现了警告提示。这是怎么回事&#xff1f;由于先去使用了SpringBoot并没有对Spring进行…...

Rust语法: 枚举,泛型,trait

这是我学习Rust的笔记&#xff0c;本文适合于有一定高级语言基础的开发者看不适合刚入门编程的人&#xff0c;对于一些概念像枚举&#xff0c;泛型等&#xff0c;不会再做解释&#xff0c;只写在Rust中怎么用。 文章目录 枚举枚举的定义与赋值枚举绑定方法和函数match匹配枚举…...

hivesql-dayofweek 函数

返回日期或时间戳的星期几。 此函数是 extract(DAYOFWEEK FROM expr) 的同义函数。 语法 dayofweek(expr) 参数 expr&#xff1a;一个 DATE 或 TIMESTAMP 表达式。 返回 一个 INTEGER&#xff0c;其中 1 Sunday 和 7 Saturday。 示例 > SELECT dayofweek(2009-07-30)…...

DIP:《Deep Image Prior》经典文献阅读总结与实现

文章目录 Deep Image Prior1. 方法原理1.1 研究动机1.2 方法 2. 实验验证2.1 去噪2.2 超分辨率2.3 图像修复2.4 消融实验 3. 总结 Deep Image Prior 1. 方法原理 1.1 研究动机 动机 深度神经网络在图像复原和生成领域有非常好的表现一般归功于神经网络学习到了图像的先验信息…...

LAXCUS如何通过技术创新管理数千台服务器

随着互联网技术的不断发展&#xff0c;服务器已经成为企业和个人获取信息、进行计算和存储的重要工具。然而&#xff0c;随着服务器数量的不断增加&#xff0c;传统的服务器管理和运维方式已经无法满足现代企业的需求。LAXCUS做为专注服务器集群的【数存算管】一体化平台&#…...

【Java】BF算法(串模式匹配算法)

☀️ 什么是BF算法 BF算法&#xff0c;即暴力算法&#xff0c;是普通的模式匹配算法&#xff0c;BF算法的思想就是将目标串S的第一个与模式串T的第一个字符串进行匹配&#xff0c;若相等&#xff0c;则继续比较S的第二个字符和T的第二个字符&#xff1b;若不相等&#xff0c;则…...

Vue:使用Promise.all()方法并行执行多个请求

在Vue中&#xff0c;可以使用Promise.all()方法来并行执行多个请求。当需要同时执行多个异步请求时&#xff0c;可以将这些请求封装为Promise对象并使用Promise.all()方法来执行它们。 示例1&#xff1a; 以下是一个示例代码&#xff0c;展示了如何通过Promise.all()方法并行…...

21.0 CSS 介绍

1. CSS层叠样式表 1.1 CSS简介 CSS(层叠样式表): 是一种用于描述网页上元素外观和布局的样式标记语言. 它可以与HTML结合使用, 通过为HTML元素添加样式来改变其外观. CSS使用选择器来选择需要应用样式的元素, 并使用属性-值对来定义这些样式.1.2 CSS版本 CSS有多个版本, 每个…...

下一代计算:嵌入AI的云/雾/边缘/量子计算

计算系统在过去几十年中推动了计算机科学的发展&#xff0c;现在已成为企业世界的核心&#xff0c;提供基于云计算、雾计算、边缘计算、无服务器计算和量子计算的服务。现代计算系统解决了现实世界中许多需要低延迟和低响应时间的问题。这有助于全球各地的青年才俊创办初创企业…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...