基于Flask框架开发Python简易修改密码页面的技术需求
基于Flask实现修改密码页面方案
核心逻辑
- 权限管控:用Flask-Login的
@login_required装饰器限制仅已登录用户可访问修改密码页面 - 流程校验:验证当前密码正确性 → 校验新密码与确认密码一致性 → 更新密码并同步到数据文件(
pwd.csv) - 错误反馈:针对各类异常场景返回明确提示,优化用户操作体验
完整实现代码
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
相关产品推荐
相关产品推荐

