问题描述
我在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
)中获取任何值。