我正试图使用int((函数和带有min-set的数字类型只接受整数输入。但我注意到,当我给出5.0这样的输入时,它应该将其视为无效输入,只接受整数。
<input autocomplete="off" class="form-control" min="0" name="shares" id="shares" placeholder="Shares" type="number">
def sell():
"""Sell shares of stock"""
rows = db.execute("SELECT * FROM tracker WHERE id=:id", id = session["user_id"])
if request.method == "GET":
return render_template("sell.html", rows = rows)
else:
symbol = request.form.get("symbol")
shares = request.form.get("shares")
if not shares:
return apology("missing shares",400)
if not symbol:
return apology("missing symbol",400)
lis = db.execute("SELECT * FROM tracker WHERE id=:id AND name=:name", id=session["user_id"], name=symbol)
share = int(shares)
if lis[0]["no"] < share:
return apology("too many shares",400)
price = lookup(symbol)["price"]
cost = price * share;
saving = db.execute("SELECT cash FROM users WHERE id=:id", id=session["user_id"])[0]["cash"]
db.execute("UPDATE users SET cash=:cash WHERE id=:id", cash=cost + saving, id=session["user_id"])
if lis[0]["no"] == share:
db.execute("DELETE FROM tracker WHERE id=:id AND name=:name", id=session["user_id"], name=symbol)
else:
db.execute("UPDATE tracker SET no=:no where id=:id AND name=:name",no=lis[0]["no"] - share,id=session["user_id"], name=symbol)
db.execute("UPDATE users SET cash=:cash WHERE id=:id", cash=saving+cost, id=session["user_id"])
flash("Sold!")
return redirect("/")
我没有看到错误代码,但我猜是由html输入引起的。
更新
试试这个:
<input autocomplete="off" class="form-control" step="0" name="shares" id="shares" placeholder="Shares" type="number">
更新:
显然,您可以在Python中运行检查,方法如下:
symbol = request.form.get("symbol") shares = request.form.get("shares") if not symbol: return apology("missing symbol",400) if shares: try: shares = int(shares) except ValueError: error = 'It must be an integer' return redirect("/", error=error) else: return apology("missing shares",400) lis = db.execute("SELECT * FROM tracker WHERE id=:id AND name=:name", id=session["user_id"], name=symbol) if lis[0]["no"] < share: return apology("too many shares",400)
(仅供参考,我保留旧答案(
这不会起作用,因为股票将是一个字符串
shares = intrequest.form.get("shares") if isinstance(shares, float)): error = 'It must be an integer' return redirect("/", error=error)
这会起作用,因为首先它会检查是否是浮点,如果是,它会重定向,否则你会把它变成