视频加载失败

图书管理系统

1506 字
8 分钟
图书管理系统

【一】基础准备#

【1】创建Django项目#

Terminal window
django-admin startproject BookControlSystem
  • 或者借助第三方软件,如Pycharm

【2】创建APP#

Terminal window
# 创建图书APP
python manage.py startapp book
# 创建作者APP
python manage.py startapp author
# 创建出版社APP
python manage.py startapp publish

【3】注册APP#

  • 将创建的三个APP注册到Django的配置文件中
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 注册自己创建的APP
"book.apps.BookConfig",
"author.apps.AuthorConfig",
"publish.apps.PublishConfig"
]

【4】修改中间件#

  • 因为是走form表单的post请求,注释掉csrf校验的中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 走 form 表单,发送post请求需要避开 csrf 认证
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

【5】模板文件配置#

  • 增加更多可被检索到的模板文件目录
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
# 增加模板文件路径
os.path.join(BASE_DIR, 'templates'),
os.path.join(BASE_DIR, 'book', 'templates'),
os.path.join(BASE_DIR, 'publish', 'templates'),
os.path.join(BASE_DIR, 'author', 'templates'),
]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

【6】静态文件配置#

  • 本项目需要使用到的bootstrap和jQuery等第三方插件使用的是本地的静态文件
STATIC_URL = 'static/'
# 添加 static 静态文件目录
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]

【7】数据库配置#

  • 本项目采用MySQL作为主要存储数据库
# 默认的sqlite3数据库
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# }
# }
# 自主使用MySQL数据库
# 创建数据库
# create database book_system;
# 数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "book_system",
'USER': "root",
'PASSWORD': "123456",
'HOST': "127.0.0.1",
'PORT': 3306
}
}
# 解决Django连接MySQL报错
# 方式一:安装 mysqlclient
# pip install mysqlclient
# 方式二:猴子补丁
# import pymysql
# pymysql.install_as_MySQLdb()

【八】修改时区#

# 默认所有报错为英文
# LANGUAGE_CODE = 'en-us'
# 默认时区为国际时区
# TIME_ZONE = 'UTC'
# 修改汉化
LANGUAGE_CODE = 'zh-hans'
# 修改时区为上海时区
TIME_ZONE = 'Asia/Shanghai'

【二】表分析及字段创建#

【1】图书表#

字段名字段类型Django数据类型注释
titlevarchar(32)CharField书籍名称
pricefloatDecimalField书籍价格
levelintIntegerField书籍推荐指数
desctextTextField书籍简介
covervarcharCharField书籍封面链接
publication_datedatetimeDateTimeField书籍出版日期
publishforeignForeignKey书籍关联出版社
authorforeignManyToManyField书籍关联作者
  • book/models.py
from django.db import models
# Create your models here.
# 创建图书表
class Book(models.Model):
level = (
(0, "不推荐"),
(1, "推荐"),
(2, "非常推荐"),
(3, "强烈推荐"),
)
# 书名
title = models.CharField(max_length=32, verbose_name="书名", help_text="这本书的名字")
# 价格
# max_digits:数字允许的最大位数(即:包含小数点之前和小数点之后所有的数字个数的和)
# decimal_places:小数的最大位数(即:小数点之后的最大个数)
price = models.DecimalField(max_digits=5, decimal_places=2, verbose_name="价格", help_text="这本书的价格")
# 推荐级别
level = models.IntegerField(choices=level, verbose_name="推荐级别", help_text="这本书的推荐级别")
# 简介
desc = models.TextField(verbose_name="简介", help_text="这本书的简介")
# 封面图片链接
cover = models.CharField(max_length=255, verbose_name="封面图片链接", help_text="这本书的封面图片链接")
# 出版日期
publication_date = models.DateTimeField(auto_now_add=True)
# 图书关联出版社:出版社一,图书多,外键关系在图书
publish = models.ForeignKey(to="publish.Publish", on_delete=models.CASCADE, verbose_name="出版社",
help_text="这本书的出版社", null=True, blank=True)
# 图书关联作者:作者多,图书多,创建第三张表
author = models.ManyToManyField(to="author.Author", verbose_name="作者", help_text="这本书的作者")
class Meta:
# 定制数据库表名
db_table = "book"
# 定制管理员后台显示名
verbose_name_plural = "图书表"

【2】作者表#

(1)作者表#

字段名字段类型Django数据类型注释
namevarcharCharField作者姓名
ageintIntegerField作者年龄
genderintIntegerField作者性别
detailforeignOneToOneField作者关联作者详情

(2)作者详情表#

字段名字段类型Django数据类型注释
phonebigintBigIntegerField作者电话
emailvarcahrEmailField作者邮箱
addrvarcahrCharField作者地址
from django.db import models
# Create your models here.
# 创建作者表
class Author(models.Model):
gender_choices = (
(0, "女"),
(1, "男"),
(2, "保密")
)
# 作者姓名
name = models.CharField(max_length=32, verbose_name="作者姓名", help_text="作者的姓名")
# 作者年龄
age = models.IntegerField(verbose_name="作者年龄", help_text="作者的年龄")
# 性别
gender = models.IntegerField(choices=gender_choices, verbose_name="作者性别", help_text="作者的性别")
# 作者关联作者详情:一个作者只有一个作者详情,一对一关系,建立在表使用频率高的一方
detail = models.OneToOneField(to="AuthorDetail", null=True, blank=True, on_delete=models.CASCADE,
verbose_name="作者详情", help_text="作者的详情")
class Meta:shu'ji
# 定制数据库表名
db_table = "author"
# 定制管理员后台显示名
verbose_name_plural = "作者表"
class AuthorDetail(models.Model):
# 手机号
phone = models.BigIntegerField(verbose_name="手机号", help_text="作者的手机号")
# 邮箱
email = models.EmailField(verbose_name="邮箱", help_text="作者的邮箱")
# 住址
addr = models.CharField(max_length=255, verbose_name="住址", help_text="作者的住址")
class Meta:
# 定制数据库表名
db_table = "author_detail"
# 定制管理员后台显示名
verbose_name_plural = "作者详情表"

【3】出版社表#

字段名字段类型Django数据类型注释
namevarcahrCharField出版社名称
addrvarcharCharField出版社地址
phonebigintBigIntegerField出版社电话
emailvarcahrEmailField出版社邮箱
from django.db import models
# Create your models here.
# 创建出版设表
class Publish(models.Model):
# 出版社名字
name = models.CharField(max_length=32, verbose_name='出版社', help_text="出版社的名字")
# 出版社地址
addr = models.CharField(max_length=255, verbose_name='地址', help_text="出版社的地址")
# 出版社电话
phone = models.BigIntegerField(verbose_name='电话', help_text="出版社的电话")
# 出版社邮箱
email = models.EmailField(verbose_name='邮箱', help_text="出版社的邮箱")
class Meta:
# 定制数据库表名
db_table = "publish"
# 定制管理员后台显示名
verbose_name_plural = "出版社表"

【迁移数据库】#

  • 生成迁移文件
Terminal window
python manage.py makemigrations
  • 迁移文件生效
Terminal window
python manage.py migrate

【初始化数据】#

【三】图书管理系统首页#

【1】后端#

【2】前端#

【四】图书相关功能#

【1】图书详情#

(1)前端#

(2)后端#

【2】添加图书#

(1)前端#

(2)后端#

【3】编辑图书#

(1)前端#

(2)后端#

【4】删除图书#

(1)前端#

(2)后端#

【五】作者相关功能#

【1】作者详情#

(1)前端#

(2)后端#

【2】添加作者#

(1)前端#

(2)后端#

【3】编辑作者#

(1)前端#

(2)后端#

【4】删除作者#

(1)前端#

(2)后端#

【六】出版社相关功能#

【1】出版社详情#

(1)前端#

(2)后端#

【2】添加出版社#

(1)前端#

(2)后端#

【3】编辑出版社#

(1)前端#

(2)后端#

【4】删除出版社#

(1)前端#

(2)后端#

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Profile Image of the Author
Dream
Hello, I'm Dream.
公告
欢迎来到我的博客!爱学习爱进步。
分类
标签
最新动态
站点统计
文章
300
分类
5
标签
26
总字数
640,882
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Vercel
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录