Как мне получить доступ к строкам БД из Python? - PullRequest
0 голосов
/ 02 мая 2019

Нуб, пытаясь выяснить, как получить доступ к записям в моей базе данных sqlite из моего файла application.py. Короче говоря, я пытаюсь добавить нового пользователя и хэшировать пароль к моей базе данных, а затем держать пользователя в системе. Я использую много того же кода из данной функции входа (проект CS50 Finance), но получение ошибки 'list index out of range', означающей, что я не получаю доступ к строке должным образом. Простые ответы (которые я могу понять) предпочтительнее сложных, которые я не могу.

Я безуспешно искал здесь и в сети.

@app.route("/register", methods=["GET", "POST"])
def register():
    # Forget any user_id
    session.clear()

    # User reached route via POST (as by submitting a form via POST)
    if request.method == "POST":

        # Query database for username (it should not be there if new user)
        rows = db.execute("SELECT * FROM users WHERE username = :username",
        username=request.form.get("username"))
        hash = generate_password_hash(request.form.get("password"))

        if len(rows) != 0:
            return apology("Username is already in use, please choose a unique username", 403)
        else:
            db.execute("INSERT INTO users (username, hash) VALUES(:username, :hash)", username=request.form.get("username"), hash=hash)

        # Problem is with the below line (copied from Login function): 
        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("register.html")

1 Ответ

0 голосов
/ 02 мая 2019

Оказывается, я забыл снова запросить базу данных sql, поэтому правильный код указан ниже:

@app.route("/register", methods=["GET", "POST"])
def register():

    # Forget any other user_id
    session.clear()

    # User reached route via POST (as by submitting a form via POST)
    if request.method == "POST":
        # Query database to see if it already contains the username, with username being posted from HTML page
        rows = db.execute("SELECT * FROM users WHERE username = :username", username=request.form.get("username"))
        hash = generate_password_hash(request.form.get("password"))

        # Case where username already exists in database
        if len(rows) != 0:
            return apology("Username is already in use, please choose a unique username", 403)
        # Else insert name into database
        else:
            db.execute("INSERT INTO users (username, hash) VALUES(:username, :hash)", username=request.form.get("username"), hash=hash)

        # Now pull that user from the database
        rows = db.execute("SELECT * FROM users WHERE username = :username", username=request.form.get("username"))

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

        # Redirect user to home page
        return redirect("/")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...