django-学习路程之案例(一)
生活随笔
收集整理的這篇文章主要介紹了
django-学习路程之案例(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- BookBuypro 圖書購買案例
- 1.創建數據模型
- 2.數據遷移
- 3.admin注冊(注冊數據模型到管理模塊)
- 4.視圖函數實現多表操作功能需求
- 5.路徑配置
BookBuypro 圖書購買案例
1.創建數據模型
models.py
from datetime import datetimefrom django.db import models# Create your models here.###################################################### 用戶部分# 創建用戶數據模型 class Users(models.Model):name = models.CharField(max_length=32)age = models.IntegerField()sex = models.BooleanField(default=True)# 創建用戶詳細信息 class UserInfos(models.Model):addr = models.CharField(max_length=100)isVip = models.BooleanField(default=True)tel = models.BigIntegerField()fUser= models.OneToOneField(Users,on_delete=models.CASCADE,default=1)# 用戶買書會員卡 class Card(models.Model):num = models.IntegerField(primary_key=True)money = models.FloatField()level = models.IntegerField()fUser = models.OneToOneField(Users,on_delete=models.CASCADE,default=1)###################################################### 書籍部分# 創建出版社數據模型 class Publish(models.Model):name = models.CharField(max_length=32)addr = models.CharField(max_length=100)tel = models.BigIntegerField(default=1060)# 創建作者數據模型 class Authors(models.Model):name = models.CharField(max_length=32)age = models.SmallIntegerField()addr = models.CharField(max_length=50)# 創建書籍數據模型 class Books(models.Model):name = models.CharField(max_length=32)price = models.FloatField()# 書籍剩余數量count = models.IntegerField()# 作為購買者user的從表 建立多表之間的關系fUser = models.ManyToManyField(Users)# 是否正在銷售中isSale = models.BooleanField(default=True)# 作者Author 與 Books 是一對多的關系fAuthor = models.ForeignKey(Authors,on_delete=models.DO_NOTHING,default=1)# 圖書與出版社 的 表一對多關系fPublish = models.ForeignKey(Publish,on_delete=models.DO_NOTHING,default=1)# 創建書籍簡介數據模型 class BookInfos(models.Model):intrduction = models.TextField()type = models.CharField(max_length=32)bDate = models.DateTimeField(default=datetime.now())# 圖書信息與圖書 是一對一的關系fBook = models.OneToOneField(Books,on_delete=models.CASCADE,default=1)2.數據遷移
python manage.py makemigrations python manage.py migrate3.admin注冊(注冊數據模型到管理模塊)
admin.py
from django.contrib import adminfrom .models import *# Register your models here.# 為所有數據表模型進行注冊admin.site.register(Users) admin.site.register(UserInfos) admin.site.register(Card) admin.site.register(Books) admin.site.register(Publish) admin.site.register(BookInfos) admin.site.register(Authors)4.視圖函數實現多表操作功能需求
from django.shortcuts import render,HttpResponsefrom .models import * # Create your views here.##################################################### 添加 用戶部分def addUser(request,name,age,sex):user = Users()user.name = nameuser.age = ageif sex == 0:user.sex = Trueif sex == 1:user.sex = Falseuser.save()return HttpResponse('添加用戶 ' + user.name + ' 成功!')def addUserInfos(request,addr,isVip,tel,uId):info = UserInfos()info.addr = addrif isVip == 1:info.isVip = Trueif isVip == 0:info.isVip = Falseinfo.tel = teluser = Users.objects.get(pk=uId)info.fUser = userinfo.save()return HttpResponse('添加用戶 ' + user.name + ' 用戶信息成功!')def addCard(request,num,money,level,uId):card = Card()# 添加會員卡ID 并設置外鍵綁定用戶表內元素card.num = num# 添加會員卡余額card.money = moneycard.level = leveluser = Users.objects.get(pk=uId)card.fUser = usercard.save()return HttpResponse('添加用戶 ' + user.name + ' 會員卡信息成功!')############################################################# 添加圖書部分def addPulish(request,name,addr,tel):publish = Publish()# 添加出版社名publish.name = name# 添加出版社地址publish.addr = addr# 添加出版社電話號碼publish.tel = telpublish.save()return HttpResponse('注冊出版社 ' + publish.name + ' 成功!')# 添加作者信息 def addAuthor(request,name,age,addr):author = Authors()author.name = nameauthor.age = ageauthor.addr = addrauthor.save()return HttpResponse('添加作者 ' + author.name + ' 信息成功!')# 添加圖書信息 def addBooks(request,name,price,count,isSale,aId,pId):book = Books()book.name = namebook.price = price# 添加圖書剩余數量book.count = count# 添加圖書是否在售if isSale == 1:book.isSale = Trueif isSale == 0:book.isSale = False# 在添加書籍信息的時候綁定作者id aId 指明這本書是誰寫的author = Authors.objects.get(pk=aId)book.fAuthor = author# 在添加書籍信息的時候綁定出版社pId 指明這本書是哪個出版社出版的publish = Publish.objects.get(pk=pId)book.fPublish = publishbook.save()return HttpResponse('圖書--> ' + book.name + ' 信息添加成功!')# 添加圖書具體信息 def addBookInfo(request,intrduction,type,bDate,bId):info = BookInfos()# 添加圖書簡介info.intrduction = intrduction# 添加圖書類型info.type = type# 添加圖書出版日期info.bDate = bDate# 在添加圖書具體信息時添加外鍵信息綁定圖書 指明這個圖書簡介是那本圖書的book = Books.objects.get(pk=bId)info.fBook = bookinfo.save()return HttpResponse('添加名為: ' + book.name + ' 的圖書具體信息成功!')################################################## 刪除 用戶部分 def delUser(request,uId):user = Users.objects.get(pk=uId)user.delete()return HttpResponse('刪除用戶 ' + user.name +'成功!')def delUserInfo(request,uiId):userinfo = UserInfos.objects.get(pk=uiId)userinfo.delete()return HttpResponse('刪除用戶 ' + userinfo.fUser.name + ' 信息成功!')def delCard(request,cardId):card = Card.objects.get(pk=cardId)card.delete()return HttpResponse('刪除用戶 ' + card.fUser.name + ' 會員卡成功!')################################################## 刪除 圖書部分def delPublish(request,pId):publish = Publish.objects.get(pk=pId)publish.delete()return HttpResponse('出版社 ' + publish.name + ' 刪除成功!')def delAuthor(request,aId):author = Authors.objects.get(pk=aId)author.delete()return HttpResponse('作者 ' + author.name + ' 刪除成功!')def delBook(request,bId):book = Books.objects.get(pk=bId)book.delete()return HttpResponse('書籍 ' + book.name + ' 刪除成功!')def delBookInfo(request,biId):bookinfo = BookInfos.objects.get(pk=biId)bookinfo.delete()return HttpResponse('書籍 ' + BookInfos.fBook.name + ' 詳細信息刪除成功!')################################################## 更改 用戶部分def modifyUser(request,uId,name,age,sex):user = Users.objects.get(pk=uId)# 更改用戶信息if name == '000':passelse:user.name = nameif age == 000:passelse:user.age = ageif sex == 000:passelse:user.sex = sexuser.save()return HttpResponse('更改 ' + user.name + ' 信息成功!')# 構造更改用戶詳細信息方法 def modifyUserInfo(request,uiId,addr,isVip,tel):userinfo = UserInfos.objects.get(pk=uiId)# 更改用戶詳細信息if addr == '000':passelse:userinfo.addr = addrif isVip == 000:passelse:userinfo.isVip = isVipif tel == 000:passelse:userinfo.tel = teluserinfo.save()return HttpResponse('用戶 ' + userinfo.fUser.name + ' 詳細信息更改成功!')def modifyCard(request,cardId,uId,level):card = Card.objects.get(pk=cardId)# 更改用戶會員卡信息user = Users.objects.get(pk=uId)if uId == 000:pass# 如果更改則將會員卡綁定到輸入uId的用戶上elif user.card.fUser_id is not None:print('該用戶已有綁定的會員卡!')# 如果uId 匹配的用戶沒有會員卡綁定 則將cardId 匹配的會員卡綁定到該用戶上else:card.fUser = user# 如果level 值為0 則不更改信息if level == 000:passelse:card.level = levelcard.save()return HttpResponse('用戶 ' + card.fUser.name + ' 會員卡信息更改成功!')##################################################### 更改 圖書部分 def modifyPublish(request,pId,name,addr,tel):publish = Publish.objects.get(pk=pId)if name == '000':passelse:publish.name = nameif addr == '000':passelse:publish.addr = addrif tel == 000:passelse:publish.tel = telpublish.save()return HttpResponse('出版社 ' + publish.name + ' 信息更改成功!')def modifyAuthor(request,aId,name,age,addr):author = Authors.objects.get(pk=aId)# 更改作者信息if name == '000':passelse:author.name = nameif age == 000:passelse:author.age = ageif addr == '000':passelse:author.addr = addrauthor.save()return HttpResponse('作者 ' + author.name + ' 信息更改成功!')def modifyBook(request,bId,name,price,count,isSale):book = Books.objects.get(pk=bId)# 更改書籍信息if name == '000':passelse:book.name = nameif price == 000:passelse:book.price = priceif count == 000:passelse:book.count = countif isSale == 000:passelse:book.isSale = isSalebook.save()return HttpResponse('書籍 ' + book.name + ' 信息修改成功!')def modifyBookInfo(request,biId,intrduction,type,bDate):bookinfo = BookInfos.objects.get(pk=biId)# 更改書籍詳細信息if intrduction == '000':passelse:bookinfo.intrduction = intrductionif type == '000':passelse:bookinfo.type = typeif bDate == '000':passelse:bookinfo.bDate = bDatebookinfo.save()return HttpResponse('書籍 ' + bookinfo.fBook.name + ' 詳細信息修改成功!')################################################### 查詢 用戶信息部分# 查詢用戶信息def getUserByUserInfo(request,uiId):userinfo = UserInfos.objects.get(pk=uiId)return HttpResponse('用戶詳細信息id為 ' + str(uiId) + ' 的用戶名為: ' + userinfo.fUser.name)def getUserInfoByUser(request,uId):user = Users.objects.get(pk=uId)return HttpResponse('用戶id為 ' + str(uId) + ' 的用戶詳細信息為 ' +' --用戶地址: ' + user.userinfos.addr + ' -- ' + ' \n--用戶是否是會員 ' + str(user.userinfos.isVip)+ ' \n--用戶電話號碼: ' + str(user.userinfos.tel))def getCardByUser(request,uId):user = Users.objects.get(pk=uId)return HttpResponse('id為 ' + str(uId) + ' 的用戶的會員卡信息如下: \n' + '--卡號: ' + str(user.card.num)+ '\n--余額: ' + str(user.card.money) + '\n--會員等級: ' + str(user.card.level))def getUserByCard(request,cardId):card = Card.objects.get(pk=cardId)return HttpResponse('會員卡號為 ' + str(cardId) + ' 的用戶名為: ' + card.fUser.name)################################################### 查詢 圖書信息部分# 查詢出版社信息def getPublishByBook(request,bId):book = Books.objects.get(pk=bId)return HttpResponse('id為 ' + str(bId) + ' 的書籍的出版社為: ' + book.fPublish.name)def getBookByPublish(request,pId):publish = Publish.objects.get(pk=pId)str = ''for book in publish.books_set.all():str += book.namestr += ', 'return HttpResponse(publish.name + ' 出版的書籍有: ' + str)# 查詢作者信息def getAuthorByBook(request,bId):book = Books.objects.get(pk=bId)return HttpResponse(book.name + ' 的作者是: ' + book.fAuthor.name)def getBookByAuthor(request,aId):author = Authors.objects.get(pk=aId)str = ''for book in author.books_set.all():str += book.namestr += ', 'return HttpResponse(author.name + ' 的作品有:' + str )# 查詢書籍信息def getBookByBookInfo(request,biId):bookinfo = BookInfos.objects.get(pk=biId)return HttpResponse(bookinfo.intrduction + ' 形容的是: ' + bookinfo.fBook.name)def getBookInfoByBook(request,bId):book = Books.objects.get(pk=bId)return HttpResponse(book.name + ' 的詳細信息如下:\n' + '--簡介: ' + book.bookinfos.intrduction+ '\n--類型:' + book.bookinfos.type + '\n--創作時間: ' + str(book.bookinfos.bDate))############################################################# 購買操作# 用戶購買書籍 def UserBuyBook(request,uId,bId):user = Users.objects.get(pk=uId)book = Books.objects.get(pk=bId)mon = user.card.money - book.price# 圖書外鍵對應的客戶是一個集合if user.card.money == 0:return HttpResponse('您的余額不足,不能購買此圖書!')elif mon < 0:return HttpResponse('您的余額不足以扣除本次支付,請充值^_^!')else:if book.count <= 0:return HttpResponse('圖書存量不足!')else:book.count -= 1user.card.money -= book.pricebook.fUser.add(user)# 將用戶信息更改保存user.card.save()book.save()return HttpResponse('恭喜您購買成功! ' + '\n您購得的書籍 ' + book.name + ' 已經成功扣款 ' + str(book.price) + ' 歡迎下次光臨^_^!'+ '\n圖書價格: ' + str(book.price) + '---- 您的余額: ' + str(user.card.money))############################################################## 購買查詢# 查詢指定用戶買了哪些書 def getBooksByUser(request,uId):user = Books.objects.get(pk=uId)str = ''for book in user.books_set.all():str += book.namestr += ', 'return HttpResponse('用戶--> ' + user.name + ' 購買過的書籍如下:\n '+ str)# 查詢指定書籍被哪些用戶購買過def getUserByBooks(request,bId):book = Books.objects.get(pk=bId)str = ''for user in book.fUser.all():str += user.namestr += ', 'return HttpResponse('購買過 ' + book.name + ' 的用戶有:\n ' + str)5.路徑配置
from django.contrib import adminfrom django.urls import pathfrom .views import *urlpatterns = [path('admin/',admin.site.urls),###################################################### 添加# 添加用戶信息path('add/addUser/<str:name>/<int:age>/<int:sex>/',addUser),# 添加用戶詳細信息path('add/addUserInfos/<str:addr>/<int:isVip>/<int:tel>/<int:uId>/',addUserInfos),# 添加會員卡信息path('add/addCard/<int:num>/<int:money>/<int:level>/<int:uId>/',addCard),# 添加出版社信息path('add/addPublish/<str:name>/<str:addr>/<int:tel>/',addPulish),# 添加作者信息path('add/addAuthor/<str:name>/<int:age>/<str:addr>/',addAuthor),# 添加圖書信息path('add/addBooks/<str:name>/<int:price>/<int:count>/<int:isSale>/<int:aId>/<int:pId>/',addBooks),# 添加圖書詳細信息path('add/addBookInfo/<str:intrduction>/<str:type>/<str:bDate>/<int:bId>/',addBookInfo),##################################################### 刪除# 刪除用戶path('delete/delUser/<int:uId>/',delUser),# 刪除用戶詳細信息path('delete/delUserInfo/<int:uiId>/',delUserInfo),# 刪除用戶會員卡信息path('delete/delCard/<int:cardId>/',delCard),# 刪除出版社信息path('delete/delPublish/<int:pId>/',delPublish),# 刪除作者信息path('delete/delAuthor/<int:aId>/',delAuthor),# 刪除書籍信息path('delete/delBook/<int:bId>/',delBook),# 刪除書籍詳細信息path('delete/delBookInfo/<int:biId>/',delBookInfo),##################################################### 更改# 更改用戶信息path('modify/modifyUser/<int:uId>/<str:name>/<int:age>/<int:sex>/',modifyUser),# 更改用戶詳細信息path('modify/modifyUserInfo/<int:uiId>/<str:addr>/<int:isVip>/<int:tel>/',modifyUserInfo),# 更改用戶會員卡信息path('modify/modifyCard/<int:cardId>/<int:uId>/<int:level>/',modifyCard),# 更改出版社信息path('modify/modifyPublish/<int:pId>/<str:name>/<str:addr>/<int:tel>/',modifyPublish),# 更改作者信息path('modify/modifyAuthor/<int:aId>/<str:name>/<int:age>/<str:addr>/',modifyAuthor),# 更改書籍信息path('modify/modifyBook/<int:bId>/<str:name>/<int:price>/<int:count>/<int:isSale>/',modifyBook),# 更改書籍詳細信息path('modify/modifyBookInfo/<int:biId>/<str:intrduction>/<str:type>/<str:bDate>',modifyBookInfo),########################################################## 查詢# 通過用戶詳細信息查詢用戶名path('select/getUserByUserInfo/<int:uiId>/',getUserByUserInfo),# 通過用戶名查詢用戶詳細信息path('select/getUserInfoByUser/<int:uId>/',getUserInfoByUser),# 通過用戶id查詢用戶會員卡信息path('select/getCardByUser/<int:uId>/',getCardByUser),# 通過用戶會員卡信息查詢用戶名path('select/getUserByCard/<int:cardId>/',getUserByCard),# 通過書籍id查詢出版社信息path('select/getPublishByBook/<int:bId>/',getPublishByBook),# 通過出版社查詢所有出版的書籍path('select/getBookByPublish/<int:pId>/',getBookByPublish),# 通過書籍查詢作者path('select/getAuthorByBook/<int:bId>/',getAuthorByBook),# 通過作者查詢其作品path('select/getBookByAuthor/<int:aId>/',getBookByAuthor),# 通過書籍簡介查詢書籍信息path('select/getBookByBookInfo/<int:biId>/',getBookByBookInfo),# 通過書籍查詢其詳細信息path('select/getBookInfoByBook/<int:bId>/',getBookInfoByBook),############################################################### 用戶書籍購買操作# 用戶購買圖書操作path('UbuyB/UserBuyBook/<int:uId>/<int:bId>/',UserBuyBook),############################################################# 用戶書籍購買查詢# 查詢指定用戶購買了哪些圖書path('select/getBooksByUser/<int:uId>/',getBooksByUser),# 查詢指定圖書被哪些用戶購買過path('select/getUserByBooks/<int:bId>/',getUserByBooks),]總結
以上是生活随笔為你收集整理的django-学习路程之案例(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css3 烟 蚊香_如何用纯 CSS 创
- 下一篇: VBA批量OCR识别提取身份证照片信息_