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
以上代码定义了两个模型:Category
和Book
。Category
模型用于存储商品分类信息,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数据库来存储商品信息。
本文将以步骤指导您完成以下任务:
- 设置Django项目和应用程序
- 创建商品模型和数据库表
- 实现商品列表页面
- 实现商品添加页面
- 实现商品编辑和删除功能
- 配置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
的数据库表,它有五个字段:title
、author
、price
、description
和category
。__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_edit
和book_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.html
和book_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图书商城系统实战开发 - 实现商品管理 在本教程中,我们将使用Django框架来实现一个简单的图书商城系统,并重点讨论如何实现商品管理功能。此外,我们还将介绍如何使用Markdown格式来写博客,并将其集成到我们的图书商城系统中…...

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

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

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,初步了解了3D开发的一些步骤和知识,以下为制作的步骤,比较简略,备忘: 1. 制作前的设计分析: 1. 分析日光角度,阴影长度,效果 2. 分析冷暖…...

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

LeetCode 160.相交链表
文章目录 💡题目分析💡解题思路🚩步骤一:找尾节点🚩步骤二:判断尾节点是否相等🚩步骤三:找交点🍄思路1🍄思路2 🔔接口源码 题目链接👉…...
【深度学习_TensorFlow】调用keras高层API重写手写数字识别项目
写在前面 上一阶段我们完成了手写数字识别项目的构建,了解了网络构建、训练、测试的基本流程,但是对于一些常见的操作,因其使用过于频繁,实际上并无必要手动实现,而早已被封装为函数了。 这篇文章我们将了解keras高层…...
柔性数组(C语言)
也许你从来没有听说过柔性数组( flexible array )这个概念,但是它确实是存在的。 C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员,但结 构中的柔性数组成员前面必须至少一个其他…...

判断推理 -- 图形推理 -- 属性规律
中心对称:取一个点,穿过中心能找到另一个对称点。把轴对称 中心对称标出来。五角星不是中心对称。 BD对称轴方向相同,但135自带对称轴,24没带,所以6应该不带对称轴。 百分号不是轴对称。 白色对称轴 平行 或者 夹角…...

【注解使用】使用@Autowired后提示:Field injection is not recommended(Spring团队不推荐使用Field注入)
问题发生场景: 在使用 IDEA 开发 SpringBoot 项目时,在 Controller 类中使用注解 Autowired 注入一个依赖出现了警告提示,查看其他使用该注解的地方同样出现了警告提示。这是怎么回事?由于先去使用了SpringBoot并没有对Spring进行…...
Rust语法: 枚举,泛型,trait
这是我学习Rust的笔记,本文适合于有一定高级语言基础的开发者看不适合刚入门编程的人,对于一些概念像枚举,泛型等,不会再做解释,只写在Rust中怎么用。 文章目录 枚举枚举的定义与赋值枚举绑定方法和函数match匹配枚举…...
hivesql-dayofweek 函数
返回日期或时间戳的星期几。 此函数是 extract(DAYOFWEEK FROM expr) 的同义函数。 语法 dayofweek(expr) 参数 expr:一个 DATE 或 TIMESTAMP 表达式。 返回 一个 INTEGER,其中 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如何通过技术创新管理数千台服务器
随着互联网技术的不断发展,服务器已经成为企业和个人获取信息、进行计算和存储的重要工具。然而,随着服务器数量的不断增加,传统的服务器管理和运维方式已经无法满足现代企业的需求。LAXCUS做为专注服务器集群的【数存算管】一体化平台&#…...

【Java】BF算法(串模式匹配算法)
☀️ 什么是BF算法 BF算法,即暴力算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个与模式串T的第一个字符串进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;若不相等,则…...
Vue:使用Promise.all()方法并行执行多个请求
在Vue中,可以使用Promise.all()方法来并行执行多个请求。当需要同时执行多个异步请求时,可以将这些请求封装为Promise对象并使用Promise.all()方法来执行它们。 示例1: 以下是一个示例代码,展示了如何通过Promise.all()方法并行…...

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

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

Gitlab-第四天-CD到k8s集群的坑
一、.gitlab-ci.yml #CD到k8s集群的 stages: - deploy-test build-image-deploy-test: stage: deploy-test image: bitnami/kubectl:latest # 使用一个包含 kubectl 工具的镜像 tags: - k8s script: - ls -al - kubectl apply -f deployment.yaml # 根据实际情况替换…...

【Java基础】Java对象的生命周期
【Java基础】Java对象的生命周期 一、概述 一个类通过编译器将一个Java文件编译为Class字节码文件,然后通过JVM中的解释器编译成不同操作系统的机器码。虽然操作系统不同,但是基于解释器的虚拟机是相同的。java类的生命周期就是指一个class文件加载到类…...
【每日一题】88. 合并两个有序数组
【每日一题】88. 合并两个有序数组 88. 合并两个有序数组题目描述解题思路 88. 合并两个有序数组 题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 …...

Navicat Premium连接sqlserve数据库失败?你需要注意这几点看看配置对了么?
新建数据库连接的时候这么填的信息 报错 原因1:sqlserver数据库的端口和IP地址之间不是:连接而是用,连接 改成如下样式用逗号连接端口和IP地址就好了 原因2:在Navicat Premium中需要安装一个sqlserver的插件 找到安装路径的根目…...

207、仿真-51单片机脉搏心率与血氧报警Proteus仿真设计(程序+Proteus仿真+配套资料等)
毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一&a…...

flutter 初识(开发体验,优缺点)
前言 最近有个跨平台桌面应用的需求,需要支持 windows/linux/mac 系统,要做个更新应用的小界面,主要功能就是下载更新文件并在本地进行替换,很简单的小功能。 花了几分钟构建没做 UI 优化的示例界面: 由于我们的客…...
校验vue prop的几种方式
校验vue prop的几种方式 vue 要求将传递给组件的任何数据显式声明为 props。此外,它还提供了强大的内置机制来验证该数据。这充当组件和父级组件之间的约定,并确保组件能按预期使用。 让我们看看怎么对props进行校验。它可以帮助我们在开发和调试过程中…...
vue+springboot 前后端分离 上传文件处理后再下载,并且传递参数
vue代码 <template><div><input type"file" ref"fileInput" accept".json"/><el-button click"upload">上传</el-button></div> </template><script> export default {name: "…...

【Linux操作系统】举例解释Linux系统编程中文件io常用的函数
在Linux系统编程中,文件IO操作是非常常见和重要的操作之一。通过文件IO操作,我们可以打开、读取、写入和关闭文件,对文件进行定位、复制、删除和重命名等操作。本篇博客将介绍一些常用的文件IO操作函数。 文章目录 1. open()1.1 原型、参数及…...
Ubuntu和centos版本有哪些区别
Ubuntu和CentOS是两个非常流行的Linux发行版,它们在一些方面有一些区别,如下所示: CentOS的版本发布周期相对较长,主要是因为它是基于RedHatEnterpriseLinux(RHEL)的。这意味着在RHEL发布后才能推出对应的CentOS版本。而Ubuntu则在…...