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

基于Flask的迷你银行系统:如何实现余额页面展示用户CSV中的实际账户余额

解决Flask迷你银行系统余额展示问题

让我们一步步修复你的代码,实现余额页面正确展示用户CSV中的实际账户余额:

先梳理现有代码的核心问题

  • Flask路由不应该带.html后缀(/balance.html不符合规范,还容易导致路由匹配异常)
  • 判断用户邮箱存在的方式不够精准(email in df.values会检查整个DataFrame的所有值,而非仅email列)
  • Dashboard路由仅处理POST请求,用户正常GET访问时会无响应
  • 你在Dashboard页面里写了{{balance}}变量,但当前Dashboard路由并未传递该参数,可能混淆了两个页面的职责

调整后的完整代码示例

1. 修正Flask路由逻辑

import pandas as pd
from flask import Flask, request, render_template

app = Flask(__name__)
# 假设这里加载了存储用户基础信息的主CSV文件
df = pd.read_csv("main_users.csv")  # 替换为你的实际文件路径

@app.route("/dashboard", methods=["GET", "POST"])
def dashboard():
    # GET请求直接渲染仪表盘页面(用户正常访问场景)
    if request.method == 'GET':
        return render_template("dashboard.html")
    # POST请求处理跳转至余额页面的逻辑
    elif request.method == 'POST':
        return render_template("balance.html")

@app.route("/balance", methods=["GET", "POST"])  # 移除.html后缀,符合Flask路由规范
def balance():
    if request.method == "POST":
        email = request.form.get('email')  # 用get()避免表单无值时抛出KeyError
        # 精准判断邮箱是否存在于用户表的email列
        if df['email'].isin([email]).any():
            # 根据邮箱分组获取对应用户信息
            user_group = df.groupby("email").get_group(email)
            user_id = user_group.iloc[0, 7]  # 假设第8列是用户ID(索引从0开始)
            # 读取该用户的专属余额CSV文件
            user_balance_data = pd.read_csv(f"{user_id}.csv")
            # 获取最后一行的余额(假设第2列是余额字段)
            current_balance = user_balance_data.iloc[-1, 1]
            # 将余额数据传递给模板
            return render_template("balance.html", balance=current_balance)
        else:
            # 邮箱不存在时返回错误提示
            return render_template("balance.html", error="用户不存在,请检查邮箱")
    # GET请求渲染空白余额页面(用户直接访问场景)
    else:
        return render_template("balance.html")

2. 调整Dashboard页面(添加跳转至余额的表单)

因为你提到仪表盘可跳转至余额页面,需要在dashboard.html中添加表单,让用户提交邮箱以匹配对应账户:

<!DOCTYPE html> 
<html> 
<head> 
<title>Dashboard</title> 
<link rel="stylesheet" href="static/project.css"> 
</head> 
<body> 
<header>
    <h1>Finance</h1>
    <div class="slogan">Your secure safe...</div> 
</header> 
<h2 class="reg">Welcome to Your Dashboard</h2>
<!-- 添加表单用于提交邮箱查询余额 -->
<form action="/balance" method="POST">
    <label for="email">Enter Registered Email:</label>
    <input type="email" id="email" name="email" required>
    <button type="submit">Check My Balance</button>
</form>
</body> 
</html>

3. 调整Balance页面(展示余额或错误信息)

<!DOCTYPE html> 
<html> 
<head> 
<title>Account Balance</title> 
<link rel="stylesheet" href="static/project.css"> 
</head> 
<body> 
<header>
    <h1>Finance</h1>
    <div class="slogan">Your secure safe...</div> 
</header> 
<!-- 展示余额信息 -->
{% if balance %}
    <h2 class="reg">Your Account Balance is #{{ balance }}</h2>
{% endif %}
<!-- 展示错误提示 -->
{% if error %}
    <h3 style="color: red;">{{ error }}</h3>
{% endif %}
<!-- 添加返回仪表盘的链接 -->
<a href="/dashboard">Back to Dashboard</a>
</body> 
</html>

关键修改点说明

  • 路由规范:使用无后缀的路径(/balance),符合Web开发最佳实践
  • 精准校验:用df['email'].isin([email]).any()仅检查邮箱列,避免误判
  • 表单交互:通过仪表盘的表单收集用户邮箱,让余额页面能精准匹配到对应账户的CSV文件
  • 错误处理:添加用户不存在的提示,提升用户体验
  • 请求兼容:确保每个路由都能处理GET请求,覆盖用户直接访问页面的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:57:45