6-5 退出登录的视图函数
@home.route('/logout/')
@is_login
def logout():
session.pop('user_id', None)
session.pop('user', None)
return redirect(url_for('home.login'))
由于退出登录只跟sesson信息有关,则不必有页面实现
6-6 用户主页的视图函数
@home.route('/user/', methods=['GET', 'POST'])
@is_login
def user():
form = EditUserForm()
# 先在页面表单显示用户已经填写的信息
user = User.query.filter_by(name=session.get('user')).first()
form.username.data = user.name
form.email.data = user.email
form.phone.data = user.phone
if form.validate_on_submit():
# request.form - 获取表单填写的内容
username = request.form['username']
email = request.form['email']
phone = request.form['phone']
info = request.form['info']
# 1. 判断更改的用户名是否已经存在;
if username != user.name and \
User.query.filter_by(name=username).count():
flash("用户名%s已经存在" % (username))
return redirect(url_for('home.user'))
# 2. 判断更改的email地址是否已经存在;
if User.query.filter_by(email=email).count() and \
email != user.email:
flash("邮箱%s已经注册" % (email))
return redirect(url_for('home.user'))
# 2. 判断更改的电话号码是否已经存在;
if username != user.name and \
User.query.filter_by(phone=phone).count():
flash("电话%s已经注册" % (phone))
return redirect(url_for('home.user'))
# 保存更改的信息到数据库中;(难点: 存储用户头像)
# *****存储用户的头像;
file_save_path = app.config['FC_DIR']
if not os.path.exists(file_save_path):
os.makedirs(file_save_path)
# 判断是否上传了新的头像;
if form.face.data:
# 判断之前是否已经有用户头像, 如果有, 则删除;
if user.face and os.path.exists(os.path.join(file_save_path, user.face)):
os.remove(os.path.join(file_save_path, user.face)) # 删除旧头像
# 保存新的头像, 获取用户头像文件的文件名
face_name = form.face.data.filename
face_name = change_filename(face_name)
# 保存新的头像文件
form.face.data.save(os.path.join(file_save_path, face_name))
user.face = face_name
user.name = username
user.email = email
user.phone = phone
user.info = info
db.session.add(user)
db.session.commit()
flash("修改会员信息成功")
# ******修改用户信息, 如果修改的是用户名, 一定要登录出, 再重新登录。
if username != session.get('user'):
logout()
# 如果用户名没有修改,则不必退出
return render_template('home/user.html',
form=form)
页面实现的user.html
{% extends 'home/base.html' %}
{% import 'bootstrap/wtf.html' as wtf %}
{% block title %}
用户中心
{% endblock %}
{% block scripts %}
{
{ super() }}
<script>
$(document).ready(function () {
$("#md-1").addClass('active');
});
</script>
{% endblock %}
{% block content %}
<div class="container-fluid">
{# 左侧菜单栏 #}
{% include 'home/usermenu.html' %}
{# 右侧用户中心 #}
<div class="col-lg-9">
{# 面板中心 #}
<div class="panel panel-warning">
{# 面板头部 #}
<div class="panel-heading">
<h3 class="panel-title"><span class="glyphicon glyphicon-map-marker"></span> 会员中心</h3>
</div>
{# 面板主体 #}
<div class="panel-body">
{
{ wtf.quick_form(form) }}
</div>
</div>
</div>
</div>
{% endblock %}
若不更改用户名:
若更改用户名,则退出登录:
6-7 修改密码的视图函数
@home.route('/pwd/', methods=['GET', 'POST'])
def pwd():
form = PwdForm()
if form.validate_on_submit():
# 获取当前登录用户的密码
user = User.query.filter_by(name=session.get('user')).first()
# 判断用户的旧密码是否正确
if user.verify_password(form.old_pwd.data):
#数据库里面的是password,需加密存入
user.password = generate_password_hash(form.new_pwd.data)
db.session.add(user)
db.session.commit()
flash("密码更新成功")
else:
flash("旧密码错误, 请重新输入")
return redirect(url_for('home.pwd'))
return render_template('home/pwd.html', form=form)
页面实现的pwd.html
{% extends 'home/base.html' %}
{% import 'bootstrap/wtf.html' as wtf %}
{% block title %}
修改密码
{% endblock %}
{% block scripts %}
{
{ super() }}
<script>
$(document).ready(function () {
$("#md-2").addClass('active');
});
</script>
{% endblock %}
{% block content %}
<div class="container-fluid">
{# 左侧菜单栏 #}
{% include 'home/usermenu.html' %}
{# 右侧用户中心 #}
<div class="col-lg-9">
{# 面板中心 #}
<div class="panel panel-warning">
{# 面板头部 #}
<div class="panel-heading">
<h3 class="panel-title">
<span class="glyphicon glyphicon-lock"></span> 修改密码
</h3>
</div>
{# 面板主体 #}
<div class="panel-body">
{
{ wtf.quick_form(form) }}
</div>
</div>
</div>
</div>
{% endblock %}
6-8 个人评论页面的视图函数
@home.route('/comments/')
@home.route('/comments/<int:page>/')
def comments(page=1):
# 只能查看自己的所有电影评论信息
commentsPageObj = Comment.query.filter_by(user_id=session.get('user_id')
).paginate(page, per_page=app.config['PER_PAGE'])
return render_template('home/comments.html',
commentsPageObj=commentsPageObj)
页面实现的comments.html
{% extends 'home/base.html' %}
{#
参考代码:
bootstrap媒体对象: https://v3.bootcss.com/components/#panels
bootstrap面板对象: https://v3.bootcss.com/components/#panels-heading
#}
{% block scripts %}
{
{ super() }}
<script>
$(document).ready(function () {
$("#md-3").addClass('active');
});
</script>
{% endb