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開發的理解和能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38519.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38519.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38519.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

緩存淘汰算法(LFU LRU FIFO)及進程的狀態和轉換

目錄 一、緩存淘汰算法 1.LFU&#xff08;Least Frequently Used&#xff09;最近最不常用算法 2.LRU&#xff08;Least Recently User&#xff09;最近最少使用算法 3.FIFO&#xff08;First in first out&#xff09;先進先出算法 二、進程的狀態和轉換 1.最基本的三種狀…

OpenCV圖像處理——模版匹配和霍夫變換

目錄 模版匹配原理實現 霍夫變換霍夫線檢測 模版匹配 原理 實現 rescv.matchTemplate(img,template,method)import numpy as np import cv2 as cv import matplotlib.pyplot as pltimgcv.imread(./汪學長的隨堂資料/6/模板匹配/lena.jpg) templatecv.imread(./汪學長的隨堂資…

UniApp 使用命令創建頁面的詳細指南

系列文章目錄 文章目錄 系列文章目錄前言一、安裝Uni-CLI二、創建頁面三、頁面創建命令四、頁面結構五、頁面使用總結 前言 UniApp是一款跨平臺的前端框架&#xff0c;可以用于開發同時運行在多個平臺&#xff08;如微信小程序、H5、App等&#xff09;的應用程序。本文將詳細介…

系統架構設計師---考試通關練習題

第一章 系統架構設計師概述 1 .以下()不是現代信息系統的架構的三個要素。 A.構件 B.模式 C.規劃 D.屬性 解析:現代信息系統的架構有三個要素,即構件、模式和規劃。 答案:D 2. 軟件系統架構是關于軟件系統的結構、行為和()的高級抽象。 A.構件 B.模式 C…

centos-stream-9 centos9 配置國內yum源 阿里云源

源配置 tips: yum配置文件路徑 /etc/yum.repos.d/centos.repo 1.備份源配置 [Very Important!]mv /etc/yum.repos.d/centos.repo /etc/yum.repos.d/centos.repo.backup2.Clean Cache: yum clean all3.Backup the Old CentOS-Base.repo If exist this file.cd /etc/yum.repos.…

使用chatGPT-4 暢聊量子物理學(三)

集合了人類智慧的照片&#xff0c;來自 1927 年舉行的第五屆索爾維國際會議。 Omer 什么是“物理系統在被測量之前不具有確定的屬性。量子力學只能預測給定測量的可能結果的概率分布" ChatGPT 這句話描述了量子力學中的一種基本原則&#xff0c;即“物理系統在被測量之前…

手寫線程池的過程與思考

線程池的抽象接口 public interface SelfThreadPool {// 提交任務到線程池void execute(Runnable runnable);//關閉void shutdown();//獲取線程池初始化的大小int getInitSize();//獲取線程池最大的大小int getMaxSize();// 獲取線程池核心線程數量,int getCoreSize();// 獲取…

世微AP2813 平均電流雙路降壓恒流驅動器 LED儲能電源驅動指示燈IC 可恒流可爆閃 可雙路恒流

產品描述 AP2813 是一款雙路降壓恒流驅動器,高效率、外圍簡單、內置功率管&#xff0c;適用于 5-80V 輸入的高精度降壓 LED 恒流驅動芯片。內置功率管輸出最大功率可達12W&#xff0c;最大電流 1.2A。AP2813 一路直亮&#xff0c;另外一路通過 MODE1 切換全亮&#xff0c;爆閃…

利用OpenCV光流算法實現視頻特征點跟蹤

光流簡介 光流&#xff08;optical flow&#xff09;是運動物體在觀察成像平面上的像素運動的瞬時速度。光流法是利用圖像序列中像素在時間域上的變化以及相鄰幀之間的相關性來找到上一幀跟當前幀之間存在的對應關系&#xff0c;從而計算出相鄰幀之間物體的運動信息的一種方法。…

大模型PEFT技術原理(二):P-Tuning、P-Tuning v2

隨著預訓練模型的參數越來越大&#xff0c;尤其是175B參數大小的GPT3發布以來&#xff0c;讓很多中小公司和個人研究員對于大模型的全量微調望而卻步&#xff0c;近年來研究者們提出了各種各樣的參數高效遷移學習方法&#xff08;Parameter-efficient Transfer Learning&#x…

css鼠標樣式 cursor: pointer

cursor: none; cursor:not-allowed; 禁止選擇 user-select: none; pointer-events:none;禁止觸發事件, 該樣式會阻止默認事件的發生&#xff0c;但鼠標樣式會變成箭頭

Hlang社區-前端社區宣傳首頁實現

文章目錄 前言頁面結構固定釘頭部輪播JS特效完整代碼總結前言 這里的話,博主其實也是今年參與考研的大軍之一,所以的話,是抽空去完成這個項目的,當然這個項目的肯定是可以在較短的時間內完成的。 那么廢話不多說,昨天也是干到1點多,把這個首頁寫出來了。先看看看效果吧:…

Linux中 socket編程中多進程/多線程TCP并發服務器模型

一、循環服務器(while)【不常用】 一次只能處理一個客戶端的請求&#xff0c;等這個客戶端退出后&#xff0c;才能處理下一個客戶端。缺點&#xff1a;循環服務器所處理的客戶端不能有耗時操作。 模型 sfd socket(); bind(); listen(); while(1) {newfd accept();while(1){r…

分別在linux和windows上設置socket為阻塞模式

在 Linux 和 Windows 系統中&#xff0c;都可以將 socket 設置為非阻塞模式。 Linux平臺 在 Linux 系統中&#xff0c;可以使用 fcntl 函數來設置 socket 為非阻塞模式。例如&#xff1a; int flags fcntl(socket_fd, F_GETFL, 0); fcntl(socket_fd, F_SETFL, flags | O_NO…

【問心篇】渴望、熱情和選擇

加班太嚴重完全沒有時間學習&#xff0c;怎么辦&#xff1f; 我真的不算聰明的人&#xff0c;但是&#xff0c;我對學習真的是有渴望的。說得好聽一點&#xff0c;我希望自己在不停地成長&#xff0c;不辜負生活在這個信息化大變革的時代。說得不好的一點&#xff0c;就是我從…

斷點續傳的未來發展趨勢與前景展望

斷點續傳是一種在網絡傳輸中斷后&#xff0c;能夠從中斷的位置繼續傳輸的技術。它可以有效地避免因為網絡不穩定、服務器故障、用戶操作等原因導致的傳輸失敗&#xff0c;節省了用戶的時間和流量&#xff0c;提高了傳輸的效率和可靠性。斷點續傳在很多場景中都有廣泛的應用&…

AI 繪畫Stable Diffusion 研究(八)sd采樣方法詳解

大家好&#xff0c;我是風雨無阻。 本文適合人群&#xff1a; 希望了解stable Diffusion WebUI中提供的Sampler究竟有什么不同&#xff0c;想知道如何選用合適采樣器以進一步提高出圖質量的朋友。 想要進一步了解AI繪圖基本原理的朋友。 對stable diffusion AI繪圖感興趣的朋…

【洛谷 P5736】【深基7.例2】質數篩 題解(埃氏篩法)

【深基7.例2】質數篩 題目描述 輸入 n n n 個不大于 1 0 5 10^5 105 的正整數。要求全部儲存在數組中&#xff0c;去除掉不是質數的數字&#xff0c;依次輸出剩余的質數。 輸入格式 第一行輸入一個正整數 n n n&#xff0c;表示整數個數。 第二行輸入 n n n 個正整數 …

jquery如何修改選中狀態

jquery修改選中狀態的方法&#xff1a;1、使用addClass和removeClass方法&#xff0c;可以向選中的元素添加一個多個類名&#xff0c;從而改變其樣式或狀態&#xff1b;2、使用toggleClass方法&#xff0c;可以在選中元素上添加或移除一個類名&#xff0c;如果該類名已經存在&a…

208. 實現 Trie (前綴樹)

Trie&#xff08;發音類似 "try"&#xff09;或者說 前綴樹 是一種樹形數據結構&#xff0c;用于高效地存儲和檢索字符串數據集中的鍵。這一數據結構有相當多的應用情景&#xff0c;例如自動補完和拼寫檢查。 請你實現 Trie 類&#xff1a; Trie() 初始化前綴樹對象…