[英]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.