基于flask的微电影管理系统——前台管理(2)

本文详细介绍了基于Flask框架构建的微电影管理系统中,前台用户的各项功能,包括退出登录的视图函数、用户主页、修改密码、个人评论、登录日志和电影收藏查看。每个功能都配合相应的页面实现,如user.html、pwd.html、comments.html等,确保用户能够顺畅地使用系统。
摘要由CSDN通过智能技术生成

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>&nbsp;会员中心</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>&nbsp;修改密码
                    </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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值