cs50 金融:注册错误“列表索引超出范围”

问题描述 投票:0回答:1

至此,我已经完成了买入、报价、注册、索引功能。当我第一次编写注册函数时,一切正常,但是当我编写其余部分,然后返回尝试用新用户名注册时,我收到了 500 内部服务器错误。

这是我在app.py中的注册函数

@app.route("/register", methods=["GET", "POST"])
def register():
    """Register user. FIRST"""
    #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", 400)

        #Ensure password was submitted
        elif not request.form.get("password"):
            return apology("must provide password", 400)

        #Ensure password confirmation was submitted
        elif not request.form.get("confirmation"):
            return apology("must confirm password", 400)

        #Ensure password and confirmation match
        elif request.form.get("password") != request.form.get("confirmation"):
            return apology("passwords do not match", 400)

        #Query database for username
        rows = db.execute("SELECT * FROM users WHERE username = ?", request.form.get("username"))

        #Ensure username does not already exist
        if len(rows) != 0:
            return apology("username already exists", 400)

        #Insert new user into database
        db.execute("INSERT INTO users (username, hash) VALUES(?, ?)",
                   request.form.get("username"), generate_password_hash(request.form.get("password")))

        #Query database for newly inserted user
        row = db.execute("SELECT * FROM users WHERE username = ?",request.form.get("username"))

        #Remember which user has logged in
        session["user_id"] = rows[0]["id"]

        #Redirect user to homepage
        return redirect("/")

    #User reached route via GET (as by cliking a link or via redirect)
    else:
        return render_template("register.html")

任何帮助将不胜感激,如果您需要其他函数或文件来解决此问题,请告诉我,谢谢!

cs50 finance stock edx
1个回答
0
投票

这表示

session["user_id"] = rows[0]["id"]
行复数。前面的行将 sql 结果设置为行单数。在文档(或课件或我的记忆)中的某处提到,如果插入的表具有整数主键,则
insert
查询将返回分配的键。您可以使用该返回值并节省一两步。

© www.soinside.com 2019 - 2024. All rights reserved.