Python 返回道歉(“必须再次输入密码”,400) elif not request.form.get(“密码”)==request.form.get(“密码2”): 返回道歉(“密码不匹配”,400) hash=generate\u password\u hash
返回道歉(“必须再次输入密码”,400) elif not request.form.get(“密码”)==request.form.get(“密码2”): 返回道歉(“密码不匹配”,400) hash=generate\u password\u hash(request.form.get(“password”)) user_add=db.execute(“插入到用户(用户名,哈希)值中(:用户名,:哈希)”, 用户名=request.form.get(“用户名”), 散列=散列) 如果不是用户添加: 回复道歉(“已使用用户名”,400) 会话[“用户id”]=用户添加 flash(“注册新用户”) 返回重定向(“/”) 其他: 返回呈现模板(“register.html”) @app.route(“/sell”,methods=[“GET”,“POST”]) @需要登录 def sell(): “出售股票” stocks=db.execute(“从投资组合中选择股票,其中id=:id按股票分组”,id=session[“user_id”]) 如果request.method==“POST”: 如果没有,则请求.form.get(“符号”): 返回道歉(“缺少符号”) elif not request.form.get(“股份”): 返回道歉(“丢失的股份”) shares\u sell=int(request.form.get(“股票”)) company\u symbol=查找(request.form.get(“symbol”)) 总计=公司符号[“价格”]*出售股份 如果没有报价: 返回道歉(“未找到符号!”)Python 返回道歉(“必须再次输入密码”,400) elif not request.form.get(“密码”)==request.form.get(“密码2”): 返回道歉(“密码不匹配”,400) hash=generate\u password\u hash,python,html,python-3.x,sqlite,web,Python,Html,Python 3.x,Sqlite,Web,返回道歉(“必须再次输入密码”,400) elif not request.form.get(“密码”)==request.form.get(“密码2”): 返回道歉(“密码不匹配”,400) hash=generate\u password\u hash(request.form.get(“password”)) user_add=db.execute(“插入到用户(用户名,哈希)值中(:用户名,:哈希)”, 用户名=request.form.get(“用户名”), 散列=散列) 如果不是用户
欢迎来到stack exchange网络。您的问题可能会在网站上得到更好的关注,因为您对“代码检查”感兴趣。有关更多信息,请参阅。
from cs50 import SQL
from flask import Flask, flash, jsonify, redirect, render_template, request, session
from flask_session import Session
from tempfile import mkdtemp
from werkzeug.exceptions import default_exceptions, HTTPException, InternalServerError
from werkzeug.security import check_password_hash, generate_password_hash
from helpers import apology, login_required, lookup, usd
# Configure application
app = Flask(__name__,template_folder='templates')
# Ensure templates are auto-reloaded
app.config["TEMPLATES_AUTO_RELOAD"] = True
# Ensure responses aren't cached
@app.after_request
def after_request(response):
response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
response.headers["Expires"] = 0
response.headers["Pragma"] = "no-cache"
return response
# Custom filter
app.jinja_env.filters["usd"] = usd
# Configure session to use filesystem (instead of signed cookies)
app.config["SESSION_FILE_DIR"] = mkdtemp()
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
Session(app)
# Configure CS50 Library to use SQLite database
db = SQL("sqlite:///finance.db")
# Make sure API key is set
if not os.environ.get("API_KEY"):
raise RuntimeError("API_KEY not set")
@app.route("/")
@login_required
def index():
"""Show portfolio of stocks"""
stocks = db.execute("SELECT stock, number FROM portfolio WHERE id = :id", id = session['user_id'])
new_cash = db.execute("SELECT cash FROM users WHERE id = :id", id = session['user_id'])
total_amount = float(new_cash[0]['cash'])
final_amount = total_amount
for stock in stocks:
symbol = str(stock['stock'])
number_shares = int(stock['number'])
quote = lookup(symbol)
price_per_share = float(quote['price'])
total_price = float(price_per_share*number_shares)
final_amount += total_price
return render_template("index.html", stocks = stocks, cash = total_amount, final_amount = final_amount)
@app.route("/buy", methods=["GET", "POST"])
@login_required
def buy():
if request.method == "POST":
if not request.form.get("symbol"):
return apology("Missing Symbol", 400)
elif not int(request.form.get("shares")):
return apology("Enter number of Shares", )
elif not lookup(request.form.get("symbol")):
return apology("Invalid Symbol")
elif int(request.form.get("shares")) <= 0:
return apology("Number of shares must be higher than 0!")
available_cash = db.execute("SELECT cash FROM users WHERE id = :id", id = session['user_id'])
num_shares = int(request.form.get("shares"))
enquire_cash = float(available_cash[0]['cash'])
stock = lookup(request.form.get("symbol"))
amount = float(stock["price"]*num_shares)
if enquire_cash >= amount:
if db.execute("SELECT stock FROM portfolio WHERE id = :user AND stock = :stock",user=session["user_id"] ,stock=request.form.get("symbol")):
db.execute("UPDATE portfolio SET number = number + :number WHERE id = :id", id = session['user_id'], number = num_shares)
else:
db.execute("INSERT INTO portfolio(id, stock, number, price) VALUES(:id, :stock, :number, :price)", id = session['user_id'], stock = request.form.get("symbol"), number = num_shares, price = amount)
db.execute("UPDATE users SET cash = cash - :spent WHERE id = :id", id = session['user_id'], spent = amount)
return redirect("/")
else:
return apology("avaliable cash is less")
else:
return render_template("buy.html")
@app.route("/history")
@login_required
def history():
"""Show history of transactions"""
return apology("TODO")
@app.route("/login", methods=["GET", "POST"])
def login():
"""Log user in"""
# Forget any user_id
session.clear()
# User reached route via POST (as by submitting a form via POST)
if request.method == "POST":
# Ensure username was submitted
if not request.form.get("username"):
return apology("must provide username", 403)
# Ensure password was submitted
elif not request.form.get("password"):
return apology("must provide password", 403)
# Query database for username
rows = db.execute("SELECT * FROM users WHERE username = :username",
username=request.form.get("username"))
# Ensure username exists and password is correct
if len(rows) != 1 or not check_password_hash(rows[0]["hash"], request.form.get("password")):
return apology("invalid username and/or password", 403)
# Remember which user has logged in
session["user_id"] = rows[0]["id"]
# Redirect user to home page
return redirect("/")
# User reached route via GET (as by clicking a link or via redirect)
else:
return render_template("login.html")
@app.route("/logout")
def logout():
"""Log user out"""
# Forget any user_id
session.clear()
# Redirect user to login form
return redirect("/")
@app.route("/quote", methods=["GET", "POST"])
@login_required
def quote():
if request.method == "POST":
if not request.form.get("symbol"):
return apology("Missing Symbol", 400)
newstock = lookup(request.form.get("symbol"))
if newstock == None:
return apology("Stock cannot be found")
return render_template("quoted.html", newstock = newstock)
else:
return render_template("quote.html")
@app.route("/register", methods=["GET", "POST"])
def register():
"""Register user"""
if request.method == "POST":
# Ensure username was submitted
if not request.form.get("username"):
flash("Username is not available")
# Ensure password was submitted
elif not request.form.get("password"):
return apology("must enter password", 400)
elif not request.form.get("password2"):
return apology("must enter password again", 400)
elif not request.form.get("password") == request.form.get("password2"):
return apology("passwords do not match", 400)
hash = generate_password_hash(request.form.get("password"))
user_add = db.execute("INSERT INTO users (username, hash) VALUES(:username, :hash)",
username=request.form.get("username"),
hash=hash)
if not user_add:
return apology("username taken", 400)
session["user_id"] = user_add
flash("Registered new user")
return redirect("/")
else:
return render_template("register.html")
@app.route("/sell", methods=["GET", "POST"])
@login_required
def sell():
"""Sell shares of stock"""
stocks = db.execute("SELECT stock FROM portfolio WHERE id = :id GROUP BY stock", id = session["user_id"])
if request.method == "POST":
if not request.form.get("symbol"):
return apology("Missing Symbol")
elif not request.form.get("shares"):
return apology("Missing Shares")
shares_sell = int(request.form.get("shares"))
company_symbol = lookup(request.form.get("symbol"))
total= company_symbol["price"] * shares_sell
if not quote:
return apology("Symbol not found!")
elif shares_sell <= 0:
return apology("Enter a positive number")
db.execute("UPDATE portfolio SET number = number - :shares_sell WHERE id = :id AND stock = :stock", shares_sell = shares_sell, id = session["user_id"], stock=request.form.get("symbol"))
db.execute("UPDATE portfolio SET price = price - :total WHERE id = :id AND stock = :stock", total = total, id = session["user_id"], stock=request.form.get("symbol"))
return render_template("sell.html")
def errorhandler(e):
"""Handle error"""
if not isinstance(e, HTTPException):
e = InternalServerError()
return apology(e.name, e.code)
# Listen for errors
for code in default_exceptions:
app.errorhandler(code)(errorhandler)
{% extends "layout.html" %}
{% block title %}
Table
{% endblock %}
{% block main %}
<table class="table table-striped">
<thead>
<tr>
<th scope="col">Symbol</th>
<th scope="col">Name</th>
<th scope="col">Shares</th>
<th scope="col">Price</th>
<th scope="col">TOTAL</th>
</tr>
</thead>
<tbody>
{% for stock in stocks %}
<tr>
<th scope="col">1</th>
<td>{{ stock.symbol }} </td>
<td>{{ stock.number_shares }}</td>
<td>{{ stock.price_per_share }}</td>
<td>{{ stock.total_price }}</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
<tr>
<td>Current cash balance: {{ cash }}<br></td>
<td> Grand total value: {{ final_amount }}</td>
</tr>
</tfoot>
</table>
{% endblock %}