一? **** 用戶模塊展示
任務(wù)

用戶模塊
個(gè)人信息展示
密碼修改
查詢可借圖書
查詢所借圖書
1. 功能
圖書相關(guān)需要簡歷圖書相關(guān)表!
1.1 個(gè)人信息展示
后臺(tái)
userinfo.html頁面
流程: 登錄后用戶資料保存再sesion中--->查詢根據(jù)id查詢
@users.route('/userinfo', methods=['GET'])
def user_info():
'''根據(jù)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='查詢無結(jié)果!')
<!--注冊(cè)需要的列: 用戶名,等級(jí),密碼,電話號(hào)碼-->
<form class="form-signin" role="form" method="post" action="/register">
{#設(shè)置隱藏的csrf_token,使用了CSRFProtect保護(hù)app之后,即可使用csrf_token()方法#}
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<h2 class="form-signin-heading">個(gè)人資料</h2>
<input type="text" name='id' class="form-control" value="{{ reader.id }}"
required disabled>
<select name="reader_grade" id="input${1/(\w+)/\u\1/g}" class="form-control"
required="required">1.2 密碼修改
流程
<option value="1" {% if reader.grand_id==1 %} selected {% endif %}>一級(jí)讀者
</option>
<option value="2" {% if reader.grand_id==2 %} selected {% endif %}>二級(jí)讀者
</option>
<option value="3" {% if reader.grand_id==3 %} selected {% endif %}>三級(jí)讀者
</option>
</select>
<input type="text" name='reader_name' class="form-control" placeholder="用戶
名" value="{{ reader.reader_name }}" required>
<input type="text" name='reader_pass' class="form-control" placeholder="密碼"
value="{{ reader.reader_pass }}" required>
<input type="text" name='phone' class="form-control" placeholder="電話"
value="{{ reader.phone }}" required>
</form>
# 完整流程
1. 前端表單校驗(yàn)(驗(yàn)證舊密碼是否正確,驗(yàn)證三個(gè)表單數(shù)據(jù)不能為空,新密碼和舊密碼都相等)
`https://www.cnblogs.com/bignote/p/13307812.html`
2. 后端實(shí)現(xiàn)(前端未加驗(yàn)證,后臺(tái)需要驗(yàn)證數(shù)據(jù)完整性)
獲取數(shù)據(jù)--》驗(yàn)證數(shù)據(jù)完整性---》先查再改!--》跳轉(zhuǎn)頁面
@users.route('/updatepwd', methods=['GET','POST'])
def update_pwd():
if request.method=='GET':
return render_template('update_pwd.html')
else:
# 1.獲取數(shù)據(jù),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 查詢可借圖書
圖書館數(shù)量大于1的全部顯示給用戶,并且提供用戶查看書籍詳細(xì)介紹
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 = '密碼輸入錯(cuò)誤!'
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='修改失敗')
<form class="form-signin" role="form" method="post" action="/updatepwd">
{#設(shè)置隱藏的csrf_token,使用了CSRFProtect保護(hù)app之后,即可使用csrf_token()方法#}
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<h2 class="form-signin-heading">修改密碼</h2>
<input type="text" name='old_pwd' class="form-control" placeholder="請(qǐng)輸入原
生密碼" value="{{ old_pwd }}" required>
<input type="text" name='pwd1' class="form-control" placeholder="請(qǐng)輸入新密碼"
value="{{ pwd1 }}" required>
<input type="text" name='pwd2' class="form-control" placeholder="請(qǐng)?jiān)俅屋斎胄?
密碼" value="{{ pwd2 }}" required>
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
<button class="btn btn-lg btn-primary btn-block" type="submit">提交</button>
</div>
</form>圖書相關(guān)模型:圖書類型,圖書
#圖書類別 BookType
class BookType(db.Model):
'''讀者等級(jí)表'''
__tablename__ = "book_type" #表名
id = db.Column(db.Integer,primary_key=True,autoincrement=True) #id 主鍵自增
type_name = db.Column(db.String(50),nullable=True) # 級(jí)別名字
# 讀者返回來引用 級(jí)別
readers =db.relationship('Book', backref='booktype')#指定讀者對(duì)象,引用級(jí)別的別
名!
def __str__(self):
return self.type_name
class Book(db.Model):
'''讀者等級(jí)表'''
__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) # 書籍?dāng)?shù)量
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) # 單價(jià)
bookConcern = db.Column(db.String(50), nullable=True) # 出版社
bookOutCount =db.Column(db.Integer,nullable=True) #出租次數(shù)
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
查詢可借圖書
圖書館數(shù)量大于1的全部顯示給用戶,并且提供用戶查看書籍詳細(xì)介紹
后臺(tái)代碼
@users.route('/booklist', methods=['GET'])
def book_list():
# 圖書數(shù)量大于1的表示可借
books = Book.query.filter(Book.book_quantity > 1).all()
return render_template('book.html',books=books)
前臺(tái)展示
<table class="table table-hover">
<thead>1.4 注銷
清空session 中的所有數(shù)據(jù),跳轉(zhuǎn)到登錄頁面
<tr>
<th>id</th>
<th>封面</th>
<th>書名</th>
<th>作者</th>
<th>數(shù)量</th>
<th>單價(jià)</th>
<th>出版社</th>
<th>出租次數(shù)</th>
<th>書籍說明</th>
<th>圖書類別</th>
<th>借閱/歸還</th>
</tr>
</thead>
<tbody>
{% for item in books %}
<tr>
<td>{{ item.id }}</td>
<td>
<img src="/static/images/{{ item.book_imgsrc }}" class="img-
responsive" alt="Image" style="width:60px">
</td>
<td>{{ item.book_name }}</td>
<td>{{ item.author }}</td>
<td>{{ item.book_quantity }}</td>
<td>{{ item.price }}</td>
<td>{{ item.bookConcern }}</td>
<td>{{ item.bookOutCount }}</td>
<td>{{ item.bookInfo }}</td>
<td>{{ item.booktype.type_name }}</td>
<td>
<a type="button" href='#' class="btn btn-primary ">借閱</a>
<a type="button" href='#' class="btn btn-primary ">歸還</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
@app.route("/logout",methods=['GET'])
def logout():
sesison.clear()
return render_template('index.html')