图书管理(flask)

图书管理(flask)

  • 该项目的目录结构
  • apps文件夹
    存放的是索要用到的蓝图,此项目的user.py(关于用户的方法),book.py(关于书籍的方法),models.py(创建表的方法)
    -templates文件夹
    该文件夹存放的是本项目用到的页面,如此项目的add.html(增加页面),books.html(管理员看到的书籍主页面),index.html(主页面),register.html(注册页面),update.html(修改页面),user.html(用户看到的书籍主页面)
    -congig.py
    此文件为配置文件,里面有各个文件所通用的方法
  • manage.py 此文件为启动文件,运行文件的时候在此文件里面开始运行
    项目流程
  • congig.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
# 创建数据库对象
db = SQLAlchemy()

class Config(object):
    DEBUG = True
    # 数据库配置
    # 数据库链接地址
    SQLALCHEMY_DATABASE_URI = 'mysql://root:root@127.0.0.1:3306/ni'
    # 动态追踪修改设置,如未设置只会提示警告
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    SQLALCHEMY_ECHO = True
    SECRET_KEY = "sdfdfdfdxfddesfdgb^$"



def create_app():
    app = Flask(__name__)
    app.config.from_object(Config)
    db.init_app(app)
    from apps.users import user
    from apps.books import book

    app.register_blueprint(user,url_prefix="/user")
    app.register_blueprint(book,url_prefix="/book")
    return app
  • manage.py
from congig import *
from flask import render_template

from apps.models import User,Role
from congig import  create_app,db  #配置文件中
from flask_script import Manager # 扩展db指令  flask_script命令扩展包 需要安装
from flask_migrate import  Migrate,MigrateCommand # 数据库迁移库 需要安装
app = create_app()
manager = Manager(app) # 命令管理类
migrate = Migrate(app,db=db) #创建迁移对象
manager.add_command('db',MigrateCommand)  #扩展新的数据库操作指令db



app = create_app()


@app.route('/')
def index():
    return render_template('index.html')
    # return 'hai'
@app.errorhandler(404)
def page_not_fond(e):
    print(e)
    msg = '<h1>页面未找到'
    return msg

@app.errorhandler(500)
def page_not_fond(e):
    print(e)
    msg = '<h1>程序错误'
    return msg



if __name__ == '__main__':
    app.run()

    # manager.run()  # 启动



  • apps/books.py
from flask import Blueprint,render_template,request,redirect,url_for,session
from congig import *


from .models import Book
book = Blueprint('book',__name__)
# 管理员显示的东西
@book.route('/list')
def list():
    print("书记模块")
    uname = session.get("uname")
    books = Book.query.all()
    return render_template('books.html',books=books,uname = uname)

# 普通用户显示的东西
@book.route('/list1')
def list1():
    print("书记模块")
    uname = session.get("uname")
    books = Book.query.all()
    return render_template('user.html',books=books,uname = uname)
# 删除书籍
@book.route('/del_book')
def del_book():
    print("删除图书")
    id = request.args.get("id")
    try:
        book = Book.query.get(id)
        db.session.delete(book)
        db.session.commit()
        return redirect(url_for('book.list'))
    except Exception as e:
        return redirect(url_for('book.list'))


# 修改书籍,此方法是为了点击修改,跳转到修改的界面
@book.route('/update_book')
def update_book():
    print("修改图书")
    id = request.args.get('id')
    book = Book.query.get(id)
    uname = session.get("uname")
    return render_template('update.html',book=book,uname = uname)

# 修改书籍,此功能是将修改后的书籍信息提交
@book.route('/update_books',methods=['post'])
def update_books():

        id = request.form.get('book_id')
        print(id)
        book_name = request.form.get("book_name")
        book_author = request.form.get("book_author")
        book_price = request.form.get("book_price")
        book = Book.query.get(id)
        print(book)
        book.name=book_name
        book.author=book_author
        book.price=book_price
        db.session.commit()
        return redirect(url_for('book.list'))



# 模糊查询
@book.route("/select",methods=['post'])
def select_book():
    try:
        uname = session.get("uname")
        bname = request.form.get("bname")
        books = Book.query.filter(Book.name.ilike('%'+bname+"%")).all()
        if books:
            return render_template('books.html',books= books,uname=uname)
        else:
            msg = "没有查询到该书的信息"
            return render_template('books.html',msg=msg)
    except Exception as e:
        return redirect(url_for("book.list"))

# 查询所有
@book.route('/selectall',methods=['post'])
def select_books():
    uname = session.get("uname")
    books = Book.query.all()
    return render_template('books.html',books=books,uname=uname)


# 此方法是为了点击添加按钮的时候,跳转到添加的页面
@book.route('/add',methods=['post'])
def add_books():
    uname = session.get("uname")
    return render_template('add.html',uname=uname)


# 添加图书
@book.route('/add_book',methods=['post'])
def add_book():

    name = request.form.get("name")
    author = request.form.get("author")
    price = request.form.get("price")
    b_1 = Book(name=name,author=author,price=price)
    db.session.add(b_1)
    db.session.commit()
    return redirect(url_for("book.list"))
  • apps/models.py

from congig import *


class Role(db.Model):
    # 定义表名
    __tablename__ = 'roles'
    # 定义列对象
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    # 设置关系属性,方便查询使用
    us = db.relationship('User', backref='role')
    # 重写__repr__方法,方便查看对象输出内容

    def __repr__(self):
        return 'Role:%s'% self.name


# 定义用户模型类(多方)
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True, index=True)
    email = db.Column(db.String(64),unique=True)
    password = db.Column(db.String(64))
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
# 此方法是转化字符串的方法
    def __repr__(self):
        return 'User:%s'%self.name


class Book(db.Model):
    __tablename__ = "books"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True, index=True)
    author = db.Column(db.String(64))
    price = db.Column(db.Integer)

    def __repr__(self):
        return 'Book:%s'%self.name
  • apps/user.py
from congig import *
from flask import Blueprint,request,render_template,redirect,url_for,session
from .models import User
user = Blueprint("user",__name__)


# 登录
@user.route("/login",methods=['post'])
def login():
    # return render_template('index.html')
    uname = request.form.get("uname")
    pwd = request.form.get("pwd")

    user = User.query.filter_by(name=uname,password=pwd).first()
    # if uname == "admin" and pwd == '123':
    print(user)
    session['uname'] = uname

    if user and user.role_id ==1:
        return redirect(url_for('book.list'))
    elif user and user.role_id == 2:
        return redirect(url_for('book.list1'))

    else:
        mag = "用户名或密码错误"
        return render_template("index.html",msg=mag)



# 此方法是为了点击注册时跳转到注册页面
@user.route('register',methods=['post'])
def regist():
    return render_template("register.html")


# 此方法为主要的注册功能
@user.route('register1',methods=['post'])
def register():
    # return render_template("register.html")
    uname = request.form.get("uname")
    pwd= request.form.get("pwd")
    email = request.form.get("email")
    u1 = User(name=uname,password=pwd,email=email,role_id=2)
    print(u1)
    db.session.add(u1)
    db.session.commit()
    return render_template('index.html')
  • templates/add.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>添加图书,{{uname}}正在使用</h1>
<form action="/book/add_book" method="post"></br>
书名:<input type="text" name="name"></br>
作者:<input type="text" name="author"></br>
价格:<input type="text" name="price"></br>
    <input type="submit" value="添加">
    </form>
</body>
</html>

templates/books.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>书籍列表,欢迎{{uname}}登陆</h1>

<div >
<form style="float: left" action="/book/select" method="post">
    <input type="text" placeholder="书籍名字的关键字" name="bname">
    <input type="submit" value="显示">
</form>

<form style="float: left" action="/book/selectall" method="post">
    <input type="submit" value="显示所有">
</form>
<form action="/book/add" method="post">
    <input type="submit" value="添加图书">

</form>

</div>

<table border="2">

    <tr>
        <td>书名</td>
        <td>作者</td>
        <td>价格</td>
        <td>方法</td>

    </tr>
    {% for book in books%}
    <tr>
        <td>{{book.name}}</td>
        <td>{{book.author}}</td>
        <td>{{book.price}}</td>
        <td>
            <a href="/book/del_book?id={{book.id}}">删除</a>
            <a href="/book/update_book?id={{book.id}}">修改</a>
        </td>
    </tr>

    {%endfor %}
</table>
<h1 style="color: red">{{msg}}</h1>
</body>
</html>
  • templates.index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>登录界面 </h1>
<div style="width: 200px;height:150px;position:relative">
<form  action="/user/login" method="post">
    账号:<input type="text" name="uname"></br>
    密码:<input type="password" name="pwd"></br>
    <input type="submit" value="登录"></br>


</form>
    <br>

<form  action="/user/register" method="post">
    <input type="submit" value="注册">
    <h1 style="color:red">{{msg}}</h1>
</form>
</div>
</body>
</html>
  • templates/register.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
<form style="float: left;" action="/user/register1" method="post"><br>
    姓名:<input type="text" name="uname"><br>
    密码:<input type="text" name="pwd"><br>
    email:<input type="text" name='email'><br>
    <input type="submit" value="注册">

</form>
<!--<form action="/user/register1" method="post">-->
<!--    -->
<!--</form>-->
</div>
</body>
</html>
  • templates/update.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>修改界面,{{uname}}正在使用</h1>

<form action="/book/update_books" method="post">

    编号:<input type="hidden" value = "{{book.id}}" name = "book_id"></br>

    书名:<input type="text" value="{{book.name}}" name = "book_name"></br>

    作者:<input type="text" value="{{book.author}}" name = "book_author"></br>

    价格:<input type="text" value="{{book.price}}" name="book_price"></br>

    <input type="submit" value="完成">

</form>

</body>
</html>
  • templates/user.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>书籍列表,欢迎{{uname}}登陆</h1>
<!--<ul>-->
<!--    {% for book  in books %}-->
<!--    <li>书籍编号:{{book.id}}  名字:{{book.name}}   价格:{{book.price}}   <a href="/book/del?id={{book.id}}">删除</a> <a href="/book/update?id={{book.id}}">修改</a></li>-->
<!--    {% endfor%}-->
<!--</ul>-->
<div >
<form style="float: left" action="/book/select" method="post">
    <input type="text" placeholder="书籍名字的关键字" name="bname">
    <input type="submit" value="显示">
</form>

<form  action="/book/selectall" method="post">
    <input type="submit" value="显示所有">
</form>

</div>

<table border="1">

    <tr>
        <td>书名</td>
        <td>作者</td>
        <td>价格</td>
    </tr>
    {% for book in books%}
    <tr>
        <td>{{book.name}}</td>
        <td>{{book.author}}</td>
        <td>{{book.price}}</td>

    </tr>

    {%endfor %}
</table>
</body>
</html>

文件
链接:https://pan.baidu.com/s/1blceOthrXbI5RvOuGMy5OA
提取码:r51y
复制这段内容后打开百度网盘手机App,操作更方便哦

posted @ 2020-12-30 11:35  千足  阅读(150)  评论(0)    收藏  举报