基于flask的图书管理系统-蓝图

基于flask的图书管理-- 蓝图方式

效果图, 只有基本的增删功能

目录

app 应用名
   templates   存放模板, html之类的
        book   用于区分html文件
                index.html   主页展示
    view   存放视图
       __init__  初始化蓝图
         bookManage.py   视图函数
__init__    这个是app的类 , 初始化文件
model.py    数据库模型
manage.py   启动
migrations   这个是flask-migrate生成的, 用于迁移数据库
requirements.txt   依赖包

manage.py

启动

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
from app import create_app, db
from flask_script import Manager, Shell
from flask_migrate import Migrate, MigrateCommand
from app.model import User, Book

app = create_app()             # 初始化app
manager = Manager(app)   # flask_script
migrate = Migrate(app,db)   # 用于迁移数据库

def make_shell_context():
    return dict(app=app, db=db, User=User)

# 当导入的时候可以直接使用app db, user
manager.add_command("shell", Shell(make_context=make_shell_context))
manager.add_command(‘db‘, MigrateCommand)

if __name__ == ‘__main__‘:
    # 启动的时候需要在控制台中 输入 python xx.py runserver -h地址  -p端口
    manager.run()  

model.py

数据库模型

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
from app import db

class User(db.Model):
    __tablename__ = ‘users‘
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(30), unique=True)
    email = db.Column(db.String(40), unique=True, nullable=True)

    # db.relationship() 的第一个参数表明这个关系的另一端是哪个模型
    # db.relationship() 中的backref 参数向User 模型中添加一个role 属性
    book = db.relationship(‘Book‘, backref=‘user‘)

# 一对多, 多的关系
class Book(db.Model):
    __tablename__ = ‘books‘
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    # 设置多表属性
    author_id = db.Column(db.Integer, db.ForeignKey(‘users.id‘))


__init__

这个是app的类 , 初始化文件

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
import os

from flask import Flask, url_for
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
basedir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))

def create_app():
    app = Flask(__name__)

    # -----------  这里可以单独写到配置文件中  开始
    app.config[‘DEBUG‘] = True
    app.config[‘SECRET_KEY‘] = ‘alflxjklwelropnona‘
    app.config[‘SQLALCHEMY_DATABASE_URI‘] = ‘sqlite:///{0}‘.format(os.path.join(basedir, ‘data.sqlite‘))
    app.config[‘SQLALCHEMY_COMMIT_ON_TEARDOWN‘] = True
    app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS‘] = True

   #  ------------  配置文件 结束
    # 初始化数据库
    db.init_app(app)

    # 图书管理系统
    from app.view import book

    # 统一对外接口蓝本
    app.register_blueprint(book)

    return app

# 测试
# app = create_app()
# with app.test_request_context():
    # print(url_for(‘index‘))

__init__

这里是view下的init 初始化蓝图

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
from flask import Blueprint

# 生成蓝图
book = Blueprint(‘book‘, __name__)

# 导入执行视图
from . import bookManage

bookManage.py

这里是view下的视图函数

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
from app import db
from app.view import book
from app.model import User, Book
from flask import render_template, flash, request, redirect, url_for

@book.route(‘/‘, methods=["GET", "POST"])
# 主页展示, 添加
def index():
    if request.method == "POST":
        author = request.form[‘author‘]
        book = request.form[‘book‘]
        # all([])只有当列表里的元素都有值(不为none/0/空字符串)的时候,才会返回true
        if not all([author, book]):
            flash(‘不能为空‘)
            return redirect(url_for(‘book.index‘))
        getAuther = User.query.filter_by(name=author).first()
        if getAuther:  # 判断如果存在
            user = Book(name=book, user=getAuther)
            # db.session.add(add_book)
            # db.session.commit()
        else:         # 如果不存在
            user = User(name=author)
            book = Book(name=book)
            user.book = [book]
        db.session.add(user)
        db.session.commit()
        flash(‘添加成功‘)
        return redirect(url_for(‘book.index‘))
    else:
        queryObj = User.query.all()
        return render_template(‘book/index.html‘, queryObj=queryObj)

# 删除书本
@book.route(‘/deleteBook/<int:delid>‘)
def delete(delid):
    if Book.query.get(delid) is not None:
        # 直接删除并提交
        db.session.delete(Book.query.get(delid))
        db.session.commit()
    return redirect(url_for(‘book.index‘))

# 删除作者
@book.route(‘/delauth/<int:delid>‘)
def delauth(delid):
    if User.query.get(delid) is not None:
        # 获取用户名称
        getuser = User.query.filter_by(id=delid).first()
        # 循环书本
        for user in getuser.book:
            # Book.query.filter_by(id=delid).first()   = Book.query.get(user.id)
            # db.session.delete(Book.query.get(user.id))
            db.session.delete(Book.query.filter_by(id=delid).first())
        db.session.delete(getuser)
        db.session.commit()
        return redirect(url_for(‘book.index‘))
    return redirect(url_for(‘book.index‘))

index.html

这里是templates\book下的index.html

<h3>图书管理</h3>

<form method="post">
    <p>作者名: <input type="text" name="author"></p>
    <p>书名: <input type="text" name="book"></p>
    <input type="submit" value="提交  ">
</form>
{% with flash = get_flashed_messages() %}
    {% for foo in flash %}
        {% if foo %}
            <p>{{ foo }}</p>
        {% endif %}
    {% endfor %}
{% endwith %}
<hr>

{% for foo in queryObj %}
    <ul>
        <li>{{ foo.name }} <a href="{{ url_for(‘book.delauth‘, delid=foo.id) }}"> 删除</a></li>
        {% for book in foo.book %}
            <ul>
                <li>{{ book.name }} <a href="{{ url_for(‘book.delete‘, delid=book.id)  }}">删除</a></li>
            </ul>
        {% endfor %}
    </ul>
{% endfor %}

requirements.txt

依赖包

alembic==1.0.11
Flask==1.0.3
SQLAlchemy==1.3.5
Flask_Migrate==2.5.2
Flask_Script==2.0.6
Flask_SQLAlchemy==2.4.0

安装就直接 pip -r install requirements.txt

生成以及迁移数据库

# 下面的db 是在 manager.add_command(‘db‘, MigrateCommand) 这个中定义的, 可自行修改

# 初始化
python manage.py db init
# 提交修改的字段
python manage.py db migrate -m "add db"
# 生成数据库文件
python manage.py db upgrade

# 最后就能看到 data.sqlite文件了  还有 migrations 后续如果迁移这个文件必不可少

原文地址:https://blog.51cto.com/xiong51/2422692

时间: 2024-08-24 22:59:02

基于flask的图书管理系统-蓝图的相关文章

基于SSM的图书管理系统(读者管理借阅管理)-java图书管理系统图书馆管理

基于SSM的图书管理系统(读者管理借阅管理)-java图书管理系统图书馆管理 1.包含源程序,数据库脚本.代码和数据库脚本都有详细注释.2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善开发环境:Eclipse ,MYSQL,JDK1.7,Tomcat 7涉及技术点:MVC模式.SpringMvc.Mybatis.Spring.HTML.JavaScript.CSS.JQUERY.DWR.Ajax等系统采用Mybatis框架实现ORM对象关系映射,前台JSP实现,后台springMvc映射

基于jsp+servlet图书管理系统之后台用户信息删除操作

上一篇的博客写的是修改操作,且附有源码和数据库,这篇博客写的是删除操作,附有从头至尾写的代码(详细的注释)和数据库! 此次删除操作的源码和数据库:http://download.csdn.net/detail/biexiansheng/9732955 自此,基于jsp+servlet开发的用户信息增删该查已经全部写完了,上面的链接是全部的代码,包含增删该查和数据库. 注意点: 1:删除操作使用的是伪删除.即只是不在页面显示了,但是还保存在数据库. 2:分页查询使用的是一个小工具,后面有时间把这些

基于MVC的图书管理系统

<span style="font-size:18px;">用Java编写一个图书管理系统:</span> <span style="font-size:18px;">需求:能列表化显示图书信息:并且能够完成图书出入库.显示全部.增加图书.客户能够购买图书:</span> <span style="font-size:18px;"> </span> <span styl

基于jsp+servlet图书管理系统之后台用户信息修改操作

上一篇的博客写的是查询操作,且附有源码和数据库,这篇博客写的时候修改操作,附有从头至尾写的代码(详细的注释)和数据库! 此次修改操作的源码和数据库:http://download.csdn.net/detail/biexiansheng/9732691 为了方便理解和说明,先写一下执行的流程和步奏,详细代码可以下载连接. 1:修改操作的执行流程: 1.1:修改操作需要先获取到用户信息的编号,然后才可以进行修改,脑子里一定有这个思路.故获取用户编号的操作即为查询操作.这里使用了一个小工具进行分页操

基于jsp+servlet图书管理系统之后台用户信息查询操作

上一篇的博客写的是查询操作,且附有源码和数据库,这篇博客写的时候查询操作,附有从头至尾写的代码(详细的注释)和数据库! 此次查询操作的源码和数据库:http://download.csdn.net/detail/biexiansheng/9732095 为了方便理解和说明,这里简单介绍一些执行的流程,方便理解.插入操作的执行流程和说明: 1:插入操作的执行流程如下 1.1:首先登录页面,设置默认的打开页面是login.jsp. <!-- 默认模仿的是登录界面login.jsp页面 -->  &

作业六—图书管理系统(SPEC)系统性能评估测试

一.图书管理系统的典型用户和场景: 该系统是为各类学校图书馆和社会各大图书馆和书店管理者使用的图书管理系统.但是我们还是已北京工业大学耿丹学院图书馆为典型用户进行主要设计的! 二.SPEC测试的目标: 本轮测试的目的是测试我们设计的图书管理系统在使用管理期间的不足和是否能够完成我们一开始在设计阶段是给这个系统所指定的性能指标. 本轮测试内容包括以下图书管理系统以下的子系统: 1.登录子系统 2.借书子系统 3.还书子系统 4.人员管理子系统 5.图书管理子系统 6.退出子系统 三.建立一套测试过

手把手实现Java图书管理系统(附源码)

基于SSM的图书管理系统的设计与实现 一.系统简介 本课程演示的是一套基于Java的SSM框架实现的图书管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群. 详细介绍了图书管理系统的实现,包括:1.环境搭建2.系统功能3.技术实现4.项目运行5.功能演示6.系统扩展 以通俗易懂的方式,手把手的带你从零开始运行本套图书管理系统,该项目附带全部源码可作为毕设使用. 二.技术实现 1.后台框架:Spring.SpringMVC.MyBatis2.UI界面:BootStr

[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)

[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date  周六 10 一月 2015 By 钟谢伟 Category website development Tags asp.net / mvc4 相关资源 ibatis manual pro git 廖雪峰的官方网站 BookMS-V1.0 上一篇链接 任务简介 开发工具:VS2010 项目框架:MVC4 浏览器:Chrome 数据库ORM框架:iBatis.net 数据库:mysql 后端开

基于Flask实现后台权限管理系统 - 汇总

基于Flask实现后台权限管理系统 - 导言 基于Flask实现后台权限管理系统 - 高清图 基于Flask实现后台权限管理系统 - Flask 基于Flask实现后台权限管理系统 - 表设计 基于Flask实现后台权限管理系统 - 更多内容