CS50金融写作数据库问题

问题描述

我在CS50金融方面遇到另一个问题,非常感谢您的帮助。

因此,我正在研究“购买”部分,并且执行了一个额外的步骤,您在其中键入所需的库存以及所需的库存数量,然后将您带到新的html页面以确认您想买股票。此页面告诉您要购买多少股票,成本多少以及购买股票后的现金余额。

我的问题是,当我去确认页面上实际购买股票时,出现错误提示我的变量(特别是余额,份额和price_per_share)是不确定的,我无法弄清楚原因。我将在下面附上我代码的相关部分。再次感谢。

Application.PY:

@app.route("/buy",methods=["GET","POST"])
@login_required
def buy():

    if request.method == "POST":
        quote = lookup(request.form.get("symbol"))

        if quote == None:
            return apology("invalid symbol",400)

        try:
            shares = int(request.form.get("shares"))
        except:
            return apology("shares must be a positive integer",400)


        if shares <= 0:
            return apology("can't buy less than or 0 shares",400)

        users= db.execute("SELECT cash FROM users WHERE id= :user_id",user_id=session["user_id"])

        cash_remaining = users[0]["cash"]
        price_per_share = quote["price"]
        total_price = price_per_share * shares
        balance = cash_remaining-total_price
        symbol=quote["symbol"]


        return render_template ("confirmation.html",cash_remaining=cash_remaining,price_per_share=price_per_share,total_price=total_price,shares=shares,symbol=symbol,balance=balance)

    else:
        return render_template ("buy.html")

@app.route("/confirmation","POST"])
@login_required
def confirmation():

    if request.method == "POST":


        db.execute("UPDATE users SET cash = cash = :balance WHERE id = :user_id",balance=balance,user_id=session["user_id"])
        db.execute("INSERT INTO transactions (user_id,symbol,shares,price_per_share) VALUES(:user_id,:symbol,:shares,:price_per_share)",user_id=session["user_id"],symbol=request.form.get("symbol"),price_per_share=price_per_share)

        flash ("Bought!")

        return render_template("index.html")
    else:
        return render_template("confirmation.html")

如果需要,这是我的buy.HTML代码

{% extends "layout.html" %}

{% block title %}
    Quote
{% endblock %}

{% block main %}
     <form action="/buy" method="post">
        <div class="form-group">
            <input autocomplete="off" autofocus class="form-control" name="symbol" placeholder="Symbol" type="text" required/>
        </div>
        <div class="form-group">
            <input autocomplete="off" autofocus class="form-control" name="shares" placeholder="Shares Wanted" type="number" min="1" required />
        </div>
        <button class="btn btn-primary" type="submit">Get Price</button>
    </form>
{% endblock %}

最后是我的Confirmation.html:

{% extends "layout.html" %}

{% block title %}
    Quote
{% endblock %}

{% block main %}
    <form action="/confirmation" method="post">
        <p>Stock Symbol ={{symbol}}</p>
        <p>Shares to be purchased = {{shares}}</p>
        <p>Total Transaction Cost {{total_price | usd}}</p>
        <p>Current Cash = {{cash_remaining | usd}}</p>
        <p>Balance after transaction = {{balance |usd}}</p>
        <button class="btn btn-primary" type="submit">Buy</button>
    </form>

{% endblock %}

解决方法

confirmation.html中没有使用表单提交的值。一些选项:

  • 将数据添加到会话数组
  • 创建hidden input controls,将数据传送回服务器
  • 为button元素提供一个名称,以及一个json编码的字符串,其中包含确认将需要的值。

确认路线无法(尝试)从表单(例如request.form.get)中获取任何值。