一 **** 用户模块展示
任务
用户模块
个人信息展示
密码修改
查询可借图书
查询所借图书
1. 功能
图书相关需要简历图书相关表!
1.1 个人信息展示
后台
userinfo.html页面
流程: 登录后用户资料保存再sesion中--->查询根据id查询
@users.route('/userinfo', methods=['GET'])
def user_info():
'''根据id,或用户名查询,展示用户资料'''
id = session.get('user_id')
print(f'用户id:{id}')
reader = Reader.query.filter_by(id=id).all()
if len(reader)>0:
return render_template('userinfo.html',reader=reader[0])
else:
return render_template('reader.html',msg='查询无结果!')
{#设置隐藏的csrf_token,使用了CSRFProtect保护app之后,即可使用csrf_token()方法#}
个人资料
required disabled>
required="required">1.2 密码修改
流程
value="{{ reader.reader_pass }}" required>
value="{{ reader.phone }}" required>
# 完整流程
1. 前端表单校验(验证旧密码是否正确,验证三个表单数据不能为空,新密码和旧密码都相等)
`https://www.cnblogs.com/bignote/p/13307812.html`
2. 后端实现(前端未加验证,后台需要验证数据完整性)
获取数据--》验证数据完整性---》先查再改!--》跳转页面
@users.route('/updatepwd', methods=['GET','POST'])
def update_pwd():
if request.method=='GET':
return render_template('update_pwd.html')
else:
# 1.获取数据,2,完整性判断 3.修改
old_pwd = request.form.get('old_pwd')
pwd1 = request.form.get('pwd1')
pwd2 = request.form.get('pwd2')
id = session.get('user_id')修改密码页面
1.3 查询可借图书
图书馆数量大于1的全部显示给用户,并且提供用户查看书籍详细介绍
reader = Reader.query.filter_by(id=id).first()
# 判断
if not all([old_pwd,pwd1,pwd2]): # 判断列表中的所有变量是否都有值! 都有值返
回true
msg = '字段不能为空'
return render_template('update_pwd.html',msg=msg)
else:
# 判断用户名是否正确,两次密码是否相等
if reader.reader_pass !=old_pwd:
msg = '密码输入错误!'
return render_template('update_pwd.html',
msg=msg,old_pwd=old_pwd,pwd1=pwd1,pwd2=pwd2)
if pwd1 != pwd2:
msg = '密码不一致!'
return render_template('update_pwd.html',
msg=msg,old_pwd=old_pwd,pwd1=pwd1,pwd2=pwd2)
try:
reader.reader_pass = pwd2
db.session.commit()
return render_template('reader.html', msg='修改成功')
except Exception as e:
msg = '修改失败'
return render_template('reader.html', msg='修改失败')
{#设置隐藏的csrf_token,使用了CSRFProtect保护app之后,即可使用csrf_token()方法#}
修改密码
value="{{ pwd1 }}" required>
图书相关模型:图书类型,图书
#图书类别 BookType
class BookType(db.Model):
'''读者等级表'''
__tablename__ = "book_type" #表名
id = db.Column(db.Integer,primary_key=True,autoincrement=True) #id 主键自增
type_name = db.Column(db.String(50),nullable=True) # 级别名字
# 读者返回来引用 级别
readers =db.relationship('Book', backref='booktype')#指定读者对象,引用级别的别
名!
def __str__(self):
return self.type_name
class Book(db.Model):
'''读者等级表'''
__tablename__ = "book" #表名
id = db.Column(db.Integer,primary_key=True,autoincrement=True) #id 主键自增
book_name = db.Column(db.String(50),nullable=False) # 用户名
book_quantity = db.Column(db.Integer,nullable=False) # 书籍数量
bookInfo = db.Column(db.String(100),nullable=True) # 书籍说明
book_imgsrc = db.Column(db.String(50), nullable=True) # 书籍封面
author = db.Column(db.String(50), nullable=True) # 作者名字
price = db.Column(db.Integer,nullable=True) # 单价
bookConcern = db.Column(db.String(50), nullable=True) # 出版社
bookOutCount =db.Column(db.Integer,nullable=True) #出租次数
bookChar = db.Column(db.String(10), nullable=True) # 书籍首字母
book_type= db.Column(db.Integer,db.ForeignKey('book_type.id')) # 外键表名.id
def __str__(self):
return self.book_name
查询可借图书
图书馆数量大于1的全部显示给用户,并且提供用户查看书籍详细介绍
后台代码
@users.route('/booklist', methods=['GET'])
def book_list():
# 图书数量大于1的表示可借
books = Book.query.filter(Book.book_quantity > 1).all()
return render_template('book.html',books=books)
前台展示
1.4 注销
清空session 中的所有数据,跳转到登录页面
id 封面 书名 作者 数量 单价 出版社 出租次数 书籍说明 图书类别 借阅/归还
{% for item in books %}
{{ item.id }}
{{ item.book_name }} {{ item.author }} {{ item.book_quantity }} {{ item.price }} {{ item.bookConcern }} {{ item.bookOutCount }} {{ item.bookInfo }} {{ item.booktype.type_name }} {% endfor %}
@app.route("/logout",methods=['GET'])
def logout():
sesison.clear()
return render_template('index.html')