繁体   English   中英

使用 Python 确定用户名是否在 SQLite3 数据库中

[英]Determining if a username is in a SQLite3 database using Python

所以我是编程新手,目前正在学习HarvardX CS50 课程。 所以请原谅我对事物的菜鸟级别的理解。

现在我正在制作一个网站的注册页面。 用户需要输入用户名和密码,然后确认他们的密码。 然后系统应检查以确保该用户名尚未在使用中。 我相信这就是我的问题所在:

# Checks to see if username exists already, if so return apology
            usernamecheck = db.execute("SELECT COUNT(*) FROM users WHERE username = :username", username)
    
           if usernamecheck != 0:
                return apology("Username already exists.")

我已经坐了好几天了,无法破解它。 非常感谢有人告诉我如何解决这个问题。

代码:

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

    if request.method == "GET":
        return render_template("register.html")
    else:
        # Take input for username
        username = request.form.get("username")

        #If username is blank return apology
        if not username:
            return apology("You must enter a username.")

        # Checks to see if username exists already, if so return apology
        usernamecheck = db.execute("SELECT COUNT(*) FROM users WHERE username = :username", username)

       if usernamecheck != 0:
            return apology("Username already exists.")

        # Take input for password
        password = request.form.get("password")

        # if password is blank, return apology
        if not password:
            return apology("You must enter a password.")

        # Take input for confirmation
        confirmation = request.form.get("confirmation")

        # if confirmation is blank, return apology
        if not confirmation:
            return apology("You must confirm your password.")

        # if password and confirmation don't match, return apology
        if password != confirmation:
            return apology("Your password confirmation does not match the password.")

        # hash the password with generate_password_hash
        pwhash = generate_password_hash(request.form.get("password"))

        # insert the username and hash into the users table
        sql = "INSERT INTO users (username, hash) VALUES (':username', '1234')"
      # sql = "INSERT INTO users (username, pwhash VALUES ('" + username + "', '" + pwhash + "'), username = '" + username + "', pwhash = '" + pwhash + "'"
        print(sql)
        db.execute(sql)
        return redirect("/")

这是终端显示的所有错误信息:

ERROR:application:Exception on /register [POST]
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/ubuntu/finance/application.py", line 160, in register
    usernamecheck = db.execute("SELECT COUNT(*) FROM users WHERE username = :username", username)
  File "/usr/local/lib/python3.7/site-packages/cs50/sql.py", line 21, in decorator
    return f(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/cs50/sql.py", line 219, in execute
    raise RuntimeError("missing value for placeholder (:{})".format(name))
RuntimeError: missing value for placeholder (:username)
INFO:werkzeug:192.168.83.137 - - [27/Jun/2020 02:51:17] "POST /register HTTP/1.0" 500 -
INFO:werkzeug:192.168.83.137 - - [27/Jun/2020 02:51:17] "GET /static/styles.css HTTP/1.0" 200 -

编辑:我已经阅读了 Python 文档,我看到了他们的示例,但由于某种原因尝试实现它并不起作用。 我已经在这几天了,我变得非常沮丧。 希望有人不仅可以提供解决方案,还可以以相对容易理解的方式对其进行解释?

您的代码几乎是正确的。 您只需要提供username的值,如下所示。

usernamecheck = db.execute("SELECT COUNT(*) FROM users WHERE username = :username", username=username)

请注意, =符号之间没有空格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM