HTML烧瓶只接受整数输入



我正试图使用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)

这会起作用,因为首先它会检查是否是浮点,如果是,它会重定向,否则你会把它变成

最新更新