基础需求:75%
1. 列出图书列表、出版社列表、作者列表
2. 点击作者,会列出其出版的图书列表
3. 点击出版社,会列出旗下图书列表
4. 可以创建、修改、删除 图书、作者、出版社
升级需求:10%
1. 点击修改按钮,弹出模块框,模态框中展示该书的信息且信息可以修改,
2. 书名不可重复,不可修改
3. 修改图书信息时,使用ajax请求发送信息
三,编码规范需求:
编码规范需求:15%
1. 代码规范遵守pep8 (https://python.org/dev/peps/pep-0008/)
2. 函数有相应的注释
3. 程序有文档说明文件(README.md参考:https://github.com/csrftoken/vueDrfDemo)
4. 程序的说明文档必须包含的内容:程序的开发环境(django版本)、程序的实现的功能、程序的启动方式、登录用户信息、程序的运行效果
5. 程序设计的流程图:
(可以参考:https://www.processon.com/view/link/589eb841e4b0999184934329)
四,项目思路
首先做这个项目之前,推荐看一下我之前的博客:Django学习笔记(7):单表操作和多表操作,甚至有必要练习一遍。
其次,前期的基本操作,我在这里不再累赘,如果不会的话,可以参考我之前的博客:Django学习笔记(10)——Book单表的增删改查页面,当然,要是单表操作的增删改查都不会,我觉得先练习一遍没有坏处。
最后这里写一下此项目的思路。此项目就是对多表操作的再巩固。
4.1 创建模型
我们先来设定概念,字段和关系
作者模型 : 姓名 年龄
作者详细模型 : 生日 手机号码 家庭住址等等
出版商模型 : 出版商名称 所在城市 email
书籍模型 : 书名 出版日期
用户信息模型 :用户名 密码
(登录注册的用户信息)
(作者模型 和 作者详细模型 一对一关系 one - to - one)
(一本书可能会有多个作者, 一个作者也可以写多本书 )
( 作者 和 书籍 多对多的关系 many - to - many)
(一本书只应该由一个出版商出版)
( 出版商和书籍 一对多关联关系 one - to - many)
代码如下:
from django.db import models
# Create your models here.
# 出版社类
class Publish(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
def __str__(self):
return self.name
# 书类
class Book(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=32)
publishDate = models.DateField()
price = models.DecimalField(max_digits=8, decimal_places=2)
# 书只能关联一个出版社,外键通常建立在多的那一边
publish = models.ForeignKey(to='Publish', on_delete=models.CASCADE)
# 多对多,作者和书是多对多的关系
books = models.ManyToManyField(to='Book', related_name='authors')
def __str__(self):
return self.title
# 作者类
class Author(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
age = models.IntegerField()
# 作者和作者详细信息 是一对一的关系
authordetail = models.OneToOneField(to='AuthorDetail', null=True,
on_delete=models.CASCADE)
# 作者详细信息
class AuthorDetail(models.Model):
nid = models.AutoField(primary_key=True)
birthday = models.DateField()
telephone = models.BigIntegerField()
addr = models.CharField(max_length=64)
最后运行下面代码,生成数据表:
python manage.py makemigrations
python manage.py migrate
我们可以添加数据,我添加的数据如下:
insert into user1_authordetail values(1, '2019-11-12', '12345', 'boston');
insert into user1_authordetail values(2, '2014-11-12', '12312', 'houston');
insert into user1_authordetail values(3, '2013-11-12', '12432', 'ripcity');
insert into user1_author values(1, 'james', 34, 1);
insert into user1_author values(2, 'durant', 31, 2);
insert into user1_author values(3, 'curry', 30, 3);
insert into user1_publish values(1, '机械出版社');
insert into user1_publish values(2, '草堂出版社');
insert into user1_publish values(3, '人民出版社');
4.2 APP下的URL具体内容整理
1,注册
/register/
2,登录
/login/
3,注销
/logout/
4,图书列表
/book_list/
/add_book/
/update_book/101/
/del_book/
5,出版社列表
/publisher_list/
/add_publisher/
/update_publisher/101/
# 通过出版社,修改该书,之后返回出版社页面
/update_book/101/202/publisher/
/del_publisher/
# 通过出版社,查看该出版社的图书列表
/book_list/101/publisher/
# 通过出版社,增加该出版社的某本书
/add_book/101/publisher/
# 通过出版社,删除该出版社的某本书
/del_book/101/publisher/
6,作者列表
/author_list/
/add_author/
/update_author/101/
#通过作者,修改该书,之后返回作者页面
/update_book/101/21/author
/del_author
# 通过作者,查看该作者的图书列表
/book_list/101/author/
# 通过作者,增加该作者的某本书
/add_book/101/author/
# 通过作者,删除该作者的某本书
/del_book/101/author/
这里我们以book单表的增删改查页面为例,然后增加连表操作,因为作者模型和作者详细模型是一对一关系,而且书籍和作者是多对多的关系。我们这里以书籍&#x