Flask微电影网站开发

【Flask微电影】20.会员修改密码,表单下拉列表同步数据库

2018-11-11  本文已影响22人  吾星喵

个人博客,欢迎查看:https://blog.starmeow.cn/

Github地址:https://github.com/xyliurui/FlaskMovie

修改密码

修改密码

创建修改密码的表单

class PwdForm(FlaskForm):
    old_pwd = PasswordField(
        label='旧密码',
        validators=[
            DataRequired('请输入旧密码!')
        ],
        description='旧密码',
        render_kw={
            'class': "form-control",
            'placeholder': "请输入旧密码",
            'required': "required"
        }
    )
    new_pwd = PasswordField(
        label='新密码',
        validators=[
            DataRequired('请输入新密码!')
        ],
        description='新密码',
        render_kw={
            'class': "form-control",
            'placeholder': "请输入新密码",
            'required': "required"
        }
    )
    submit = SubmitField(
        label='提交',
        render_kw={
            'class': "btn btn-primary"
        }
    )

    def validate_old_pwd(self, field):
        """检查验证旧密码是否正确"""
        from flask import session
        old_pwd = field.data
        login_name = session['login_admin']
        admin = Admin.query.filter_by(name=login_name).first()
        if not admin.check_pwd(old_pwd):
            raise ValidationError('旧密码错误!')

修改pwd密码更新视图

@admin.route("/pwd/", methods=['GET', 'POST'])
@admin_login_require
def pwd():
    form = PwdForm()
    if form.validate_on_submit():
        data = form.data
        login_name = session['login_admin']
        admin = Admin.query.filter_by(name=login_name).first()
        from werkzeug.security import generate_password_hash
        admin.pwd = generate_password_hash(data['new_pwd'])
        db.session.commit()  # 提交新密码保存,然后跳转到登录界面
        flash('密码修改成功,请重新登录!', category='ok')
        return redirect(url_for('admin.logout'))
    return render_template('admin/pwd.html', form=form)

修改pwd.html密码更新表单

<form role="form" method="post">
    <div class="box-body">
        <div class="form-group">
            <label for="input_pwd">{{ form.old_pwd.label }}</label>
            {{ form.old_pwd }}
            {% for err in form.old_pwd.errors %}
                <div class="col-md-12" style="color: red">{{ err }}</div>
            {% endfor %}
        </div>
        <div class="form-group">
            <label for="input_newpwd">{{ form.new_pwd.label }}</label>
            {{ form.new_pwd }}
            {% for err in form.new_pwd.errors %}
                <div class="col-md-12" style="color: red">{{ err }}</div>
            {% endfor %}
        </div>
    </div>
    {{ form.csrf_token }}
    <div class="box-footer">
        {{ form.submit }}
    </div>
</form>
image.png

修改login.html密码修改登录提示

增加flash的提示

{% include 'admin/alert_info.html' %}
image.png

后台页面显示登录用户

修改base.html增加显示登录名,两种方式都可使用

<span class="hidden-xs">{{ session.login_admin }}</span>

<p>
    {{ session['login_admin'] }}
    <small>2018-08-08</small>
</p>

<p>用户{{ session.login_admin }}</p>
image.png

处理表单下拉列表与数据库不同步问题

当增加标签后,如果不重启服务器,则标签选项不会变化

image.png
class MovieForm(FlaskForm):
    tag_id = SelectField(
        label='标签',
        validators=[
            DataRequired('请选择标签!')
        ],
        coerce=int,
        # choices=[(tag.id, tag.name) for tag in Tag.query.all()],
        description='标签',
        render_kw={
            'class': "form-control"
        }
    )

    def __init__(self, *args, **kwargs):
        super(MovieForm, self).__init__(*args, **kwargs)
        self.tag_id.choices = [(v.id, v.name) for v in Tag.query.all()]
上一篇下一篇

猜你喜欢

热点阅读