首页 > 其他分享 >【13.5】图书管理系统

【13.5】图书管理系统

时间:2024-03-18 23:14:32浏览次数:15  
标签:name 管理系统 models text django 作者 13.5 图书 verbose

【一】基础准备

【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数据类型 注释
title varchar(32) CharField 书籍名称
price float DecimalField 书籍价格
level int IntegerField 书籍推荐指数
desc text TextField 书籍简介
cover varchar CharField 书籍封面链接
publication_date datetime DateTimeField 书籍出版日期
publish foreign ForeignKey 书籍关联出版社
author foreign ManyToManyField 书籍关联作者
  • 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数据类型 注释
name varchar CharField 作者姓名
age int IntegerField 作者年龄
gender int IntegerField 作者性别
detail foreign OneToOneField 作者关联作者详情

(2)作者详情表

字段名 字段类型 Django数据类型 注释
phone bigint BigIntegerField 作者电话
email varcahr EmailField 作者邮箱
addr varcahr CharField 作者地址
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数据类型 注释
name varcahr CharField 出版社名称
addr varchar CharField 出版社地址
phone bigint BigIntegerField 出版社电话
email varcahr EmailField 出版社邮箱
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)后端


标签:name,管理系统,models,text,django,作者,13.5,图书,verbose
From: https://www.cnblogs.com/dream-ze/p/18081722

相关文章