【13.5】图书管理系统

本文详细介绍了如何使用Django框架创建并配置项目,包括APP的创建、注册、模板文件、静态文件、数据库(MySQL)配置、表结构设计以及图书、作者和出版社管理的基础功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【一】基础准备

【1】创建Django项目

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

【2】创建APP

# 创建图书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:
        # 定制数据库表名
        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 = "出版社表"

【迁移数据库】

  • 生成迁移文件
python manage.py makemigrations
  • 迁移文件生效
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)后端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值