文章目录

  • 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 migrate

3.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-学习路程之案例(一)相关推荐

  1. Django学习知识点、路线图、资料总结大全,建议收藏!

    大家好,我是辣条. 之前更新的都是爬虫实战项目,有反馈比较好的,也有阅读量比较低的,总的来说文章内容还是比较单一的,主要纠结于是走基础纯技术输出,还是输出一些实战项目.如果大家希望我更多去更新Pyth ...

  2. 基于Pycharm的Django学习 —— 项目实战(Form和ModelForm)

    项目实战 项目开发流程 项目准备工作 项目部门管理 UI设计 depart_list 模板继承 depart_add depart_delete depart_edit 项目用户管理 user_lis ...

  3. Django学习之路-基础篇

    Django 学习之路 一.Django项目创建 1.项目结构 1.1. settings.py 文件 1.2 URL 1.3 视图函数 1.4 路由配置-path 二.请求与响应 2.1.请求和响应 ...

  4. 基于Pycharm的Django学习 —— 用户管理小demo

    自从学了Django之后,我可真粉了银角大王武沛齐,怎么说呢,还挺感慨,好好学习就对了. 学以致用,学以致用,学了Django中的ORM,怎么能够不写一个小案例呢? 基于Pycharm的Django学 ...

  5. Django介绍和虚拟环境(django特点、MVC、MVT、Django学习资料)

    MVT流程: 创建Django项目和应用 django-admin startproject name python manager.py startapp name 视图和ULR 视图的请求和响应 ...

  6. 免费教材丨第56期:《深度学习导论及案例分析》、《谷歌黑板报-数学之美》

    小编说  离春节更近了!  本期教材        本期为大家发放的教材为:<深度学习导论及案例分析>.<谷歌黑板报-数学之美>两本书,大家可以根据自己的需要阅读哦! < ...

  7. django学习之路(五)站点管理admin - django - 一直很安静 - Powered by Discuz!

    django学习之路(五)站点管理admin - django - 一直很安静 - Powered by Discuz!: "" (Via.) 转载于:https://www.cn ...

  8. 《深度学习导论及案例分析》一2.11概率图模型的推理

    本节书摘来自华章出版社<深度学习导论及案例分析>一书中的第2章,第2.11节,作者李玉鑑 张婷,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.11概率图模 ...

  9. django 学习笔记

    django 学习笔记 启动虚拟机: workon bj18_py3 创建一个项目: django-admin.py startproject mysite 启动开发用服务器:从外层项目 mysite ...

  10. oracle 百万记录 cache,学习笔记:通过案例深入学习In-Memory Database Cache 总结配置过程...

    天萃荷净 详细记录关于In-Memory Database Cache配置方法与使用案例 一.Oracle数据库创建相关用户和权限 1.创建timesten用户 store information a ...

最新文章

  1. globalmapper如何选取图像上的点_20. 用于纹理合成和转移的图像缝合
  2. 学界 | DeepMind等机构提出「图网络」:面向关系推理
  3. 详解H3C交换机“端口安全”功能
  4. CCNA和四级网工的对比
  5. 远程调用服务(RPC)和消息(Message Queue)对比及其适用/不适用场合
  6. 【linux】linux命令如何查看文件、文件夹的属性,包括大小、修改时间、谁修改的...
  7. codevs1014 装箱问题
  8. php getdbused,PHP之购物车
  9. php 显示ip所属地 (qq版)
  10. 【Xamarin挖墙脚系列:Android最重要的命令工具ADB】
  11. 跑山么、后浪们?2.0T+237匹大马力后驱CT4山路试驾体验
  12. nyoj 78:圈水池 【凸包入门】
  13. 首先不谈C语言,我们先来谈谈编程工具
  14. linux桌面图标怎么设置大小,如何更改桌面图标大小?
  15. 高精地图应用(四)横向定位
  16. js根据银行卡号进行判断属于哪个银行并返回银行卡类型
  17. CTU CU CB PU TU
  18. ttk progress bar的显示
  19. 比较好用的学习、工具网站推荐
  20. Ubuntu 环境部署 安装大全

热门文章

  1. ElasticSearch学习2_Java version:1.7.0_51 suffers from critical bug及ES对JDK版本要求
  2. 解读图书管理系统为书店带来的好处
  3. 世界顶级100款XP主题(转)
  4. backface-visibility 翻转特效
  5. 加勒比海盗船(最优装载问题)
  6. error C3646: 未知重写说明符
  7. 【MySQL】字符集utf8mb4无法存储表情踩坑记录
  8. 通过python实现乘法口诀
  9. webview打开淘宝天猫链接问题
  10. 基于springboot二次开发onlyoffice的Demo