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

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

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

python图书馆管理系统sqlite_基于flask的图书管理系统-蓝图_第1张图片

目录

python图书馆管理系统sqlite_基于flask的图书管理系统-蓝图_第2张图片

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'))

python图书馆管理系统sqlite_基于flask的图书管理系统-蓝图_第3张图片

python图书馆管理系统sqlite_基于flask的图书管理系统-蓝图_第4张图片

__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/')

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/')

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

图书管理

作者名:

书名:

{% with flash = get_flashed_messages() %}

{% for foo in flash %}

{% if foo %}

{{ foo }}

{% endif %}

{% endfor %}

{% endwith %}


{% for foo in queryObj %}

  • {{ foo.name }} 删除

{% for book in foo.book %}

  • {{ book.name }} 删除

{% endfor %}

{% 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 后续如果迁移这个文件必不可少

你可能感兴趣的:(python图书馆管理系统sqlite_基于flask的图书管理系统-蓝图)