图书管理(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,操作更方便哦
你的意见促使我改变


浙公网安备 33010602011771号