CS50 Finance "Buy" Функция не возвращает правильную ошибку - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь реализовать функцию покупки кода flask и в качестве теста я пытаюсь заставить работать два кода ошибок, которые у меня есть в функции покупки. Однако, независимо от того, что я ввожу в форму, я всегда возвращаюсь на страницу с сообщением об ошибке «Необходимо указать имя пользователя», и я не уверен, как это происходит, вместо одного из двух моих состояний ошибки.

Вот моя функция покупки:

@app.route("/buy", methods=["GET", "POST"])
@login_required
def buy():
    """Buy shares of stock"""
    # requested_quote = stock
    if request.method == "POST":
        if not request.form.get("symbol"):
            return apology("must provide symbol", 403)
        if not request.form.get("amount") or request.form.get("amount") < 1:
            return apology("Please enter amount 1 or greater", 403)

        stock = request.form.get("symbol")
        amount = request.form.get("amount")
        requested_quote = lookup(request.form.get("quote"))
        cash = db.execute("SELECT cash FROM users WHERE id = :id", session["user_id"])

        if requested_quote == None:
            return apology ("Invalid Symbol", 400)
        if (requested_quote["price"] * amount) > cash:
            return apology("Not enough funds", 400)
        else:
             db.execute("INSERT INTO purchases (id, symbol, amount, share_price) VALUES(?, ?, ?, ?)",
             (session["user_id"], stock, amount, requested_quote["price"]))
    else:
        return render_template("buy.html")

Вот функция входа в систему, которая была включена в код распределения назначения, и я думаю, что она может быть связана с моей проблемой

@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")

а также это:

def login_required(f):
    """
    Decorate routes to require login.

    http://flask.pocoo.org/docs/1.0/patterns/viewdecorators/
    """
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if session.get("user_id") is None:
            return redirect("/login")
        return f(*args, **kwargs)
    return decorated_function

Любая помощь будет оценена!

1 Ответ

0 голосов
/ 24 апреля 2020

Вы можете проверить журнал flask в терминале, где выполняется flask run. Вероятно, это покажет, что маршрут покупки не вызывается вообще. Проверьте атрибут действия элемента формы в buy. html. Возможно, логин. html был скопирован для покупки. html в качестве отправной точки, и этот атрибут никогда не менялся.

...