Python-Flask框架之——图书管理系统 , 附详解源码和效果图 !

该图书管理系统要实现的功能 :

1. 可以通过添加窗口添加书籍或作者, 如果要添加的作者和书籍已存在于书架上, 则给出相应的提示.

2. 如果要添加的作者存在, 而要添加的书籍书架上没有, 则将该书籍添加到该作者栏.

3. 如果要添加的作者和书籍都不存在于书架上 , 则将书籍和作者一起添加.

4. 每个书籍和作者旁边都有一个删除按钮 , 点击删除书籍的按钮可以将该书籍删除 , 若某作者栏的书籍全部删除完毕则显示"无".

5. 若直接点击删除作者按钮, 则可以将该作者和其书籍一起全部删掉.

该系统的实现工具:  Python的Flask框架和MySQL数据库.

效果图及源码如下:

Python源代码如下:

# coding=utf-8
from flask import Flask,render_template,request,flash,redirect,url_for
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField,SubmitField
from wtforms.validators import DataRequired

app = Flask(__name__)
"""
1. 配置数据库
    a.导入SQLALchemy扩展
    b.创建db对象, 并配置参数
    c.终端创建数据库
2. 添加作者和书模型(类)
    a.模型继承自db.Model
    b.__tablename__:表名
    c. db.Column:字段
    d. db.relationship:关系引用
3. 添加数据
4. 使用模板显示数据库查询到的数据
    a.查询所有的作者信息, 让信息传递给模板
    b.模板中按照格式, 依次for循环作者和书籍即可(通过作者获取书籍, 用的是关系引用)
5. 使用WTF显示表单 
    a.自定义表单类
    b.模板中显示
    c.设置secret_key
6. 实现相关的增删逻辑
    a.添加作者/书籍
    b.删除书籍: redirect(重定向)/url_for(指向路由)/for else  的使用.
    c.删除作者(要先删除该作者的书籍, 再删除该作者)
"""
# 配置数据库的地址URI , 格式 "数据库类型+数据库驱动名称://用户名:密码@机器地址:端口号/数据库名"  , 端口号可以不写.
# python3中用的mysql驱动是mysql-connector , 已经不支持python2的MySQLdb驱动.
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+mysqlconnector://root:[email protected]/books_demo"
# 跟踪数据库的修改 --> 不建议开启 , 一是消耗性能 , 二是未来的版本中会移除.
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
app.secret_key = "hwhefsewljfejrlesjfl"      # 没设置secret_key会有报错提醒
# 将app作为参数传入这个关联工具 , 创建一个两者相关联对象db
db = SQLAlchemy(app)

# 注意: web框架里面的模型类基本都是要继承自导入的模块中的某个父类 , 这样才会起到关联的作用.
class Author(db.Model):
    """创建作者子类"""
    __tablename__ = "authors"           # 定义表名
    # 定义字段
    # db.Column表示是一个字段 , db.Integer就代表id这个字段的数据类型是整数 , primary_key代表主键(主关键字) , 是作为表的行的唯一标识.
    # db.String代表是字符串类型 , 字符串长度定义个n个字节 , unique(唯一的) , unique=True代表这列不允许出现重复的值.
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(64),unique=True)        # string的长度随便写个2的倍数就行了
    # 在"一对多"的一中定义author_book属性 , 该属性不会出现在字段中 , 后面的backref="author"是给Book反向引用的
    # 由于是"一对多" , 所以"多"的地方用Book参数 , "一"的地方用不加s的实例对象参数author.
    author_book = db.relationship("Book",backref="author")
    def __repr__(self):
        """返回定制消息, 与__str__作用类似"""
        return "Author: %d %s<
  • 1
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值