You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Flask框架开发Python简易修改密码页面的技术需求

基于Flask实现修改密码页面方案

核心逻辑

  1. 权限管控:用Flask-Login的@login_required装饰器限制仅已登录用户可访问修改密码页面
  2. 流程校验:验证当前密码正确性 → 校验新密码与确认密码一致性 → 更新密码并同步到数据文件(pwd.csv)
  3. 错误反馈:针对各类异常场景返回明确提示,优化用户操作体验

完整实现代码

1. 补充必要依赖导入

确保代码顶部已导入以下模块:

from flask import request, render_template_string
from flask_login import login_required, current_user
import hashlib
import pandas as pd

2. 修改密码路由实现

@server.route('/change-password', methods=['GET', 'POST'])
@login_required
def change_password():
    # GET请求:渲染修改密码表单
    if request.method == 'GET':
        return render_template_string('''
            <h3>修改密码</h3>
            {% if error_msg %}
                <p style="color:red;">{{ error_msg }}</p>
            {% endif %}
            <form method="POST">
                <div style="margin:8px 0;">
                    <label>当前密码:</label>
                    <input type="password" name="current_password" required>
                </div>
                <div style="margin:8px 0;">
                    <label>新密码:</label>
                    <input type="password" name="new_password" required>
                </div>
                <div style="margin:8px 0;">
                    <label>确认新密码:</label>
                    <input type="password" name="confirm_new_password" required>
                </div>
                <button type="submit">提交修改</button>
            </form>
        ''')
    
    # POST请求:处理密码修改逻辑
    current_pwd_input = request.form.get('current_password')
    new_pwd_input = request.form.get('new_password')
    confirm_pwd_input = request.form.get('confirm_new_password')
    current_username = current_user.username

    # 校验当前密码是否正确
    stored_hashed_pwd = VALID_USERNAME_PASSWORD[current_username]['password']
    hashed_current_input = hashlib.sha256(current_pwd_input.encode()).hexdigest()
    if hashed_current_input != stored_hashed_pwd:
        return render_template_string('''
            <h3>修改密码</h3>
            <p style="color:red;">当前密码输入错误,请重新输入</p>
            <form method="POST">
                <div style="margin:8px 0;">
                    <label>当前密码:</label>
                    <input type="password" name="current_password" required>
                </div>
                <div style="margin:8px 0;">
                    <label>新密码:</label>
                    <input type="password" name="new_password" required value="{{ new_pwd }}">
                </div>
                <div style="margin:8px 0;">
                    <label>确认新密码:</label>
                    <input type="password" name="confirm_new_password" required value="{{ confirm_pwd }}">
                </div>
                <button type="submit">提交修改</button>
            </form>
        ''', new_pwd=new_pwd_input, confirm_pwd=confirm_pwd_input)
    
    # 校验新密码与确认密码是否一致
    if new_pwd_input != confirm_pwd_input:
        return render_template_string('''
            <h3>修改密码</h3>
            <p style="color:red;">新密码与确认密码不一致,请重新输入</p>
            <form method="POST">
                <div style="margin:8px 0;">
                    <label>当前密码:</label>
                    <input type="password" name="current_password" required>
                </div>
                <div style="margin:8px 0;">
                    <label>新密码:</label>
                    <input type="password" name="new_password" required value="{{ new_pwd }}">
                </div>
                <div style="margin:8px 0;">
                    <label>确认新密码:</label>
                    <input type="password" name="confirm_new_password" required>
                </div>
                <button type="submit">提交修改</button>
            </form>
        ''', new_pwd=new_pwd_input)
    
    # 更新密码(哈希后存储)
    hashed_new_pwd = hashlib.sha256(new_pwd_input.encode()).hexdigest()
    VALID_USERNAME_PASSWORD[current_username]['password'] = hashed_new_pwd
    
    # 同步更新到csv文件
    updated_pwd_df = pd.DataFrame.from_dict(VALID_USERNAME_PASSWORD, orient='index').reset_index()
    updated_pwd_df.rename(columns={'index': 'username'}, inplace=True)
    updated_pwd_df.to_csv('pwd.csv', index=False)
    
    # 修改成功反馈
    return '''
        <h3>密码修改成功!</h3>
        <a href="/">返回首页</a>
    '''

3. 关键细节说明

  • 权限拦截:@login_required会自动将未登录用户重定向到登录页面(需确保Flask-Login已配置LOGIN_URL参数)
  • 安全存储:始终使用哈希算法处理密码,避免明文存储带来的泄露风险
  • 数据持久化:修改内存中的用户密码字典后,必须同步写入csv文件,否则服务重启后修改会丢失
  • 体验优化:错误场景下保留用户已输入的新密码内容,减少重复输入操作

内容的提问来源于stack exchange,提问作者beginner123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 08:47:49