我正在创建一个小银行系统。至于现在,完全是在终点站。
您可以通过提供用户名和密码登录。我创建了一个类来验证给定的用户名和密码是否与数据库中的数据匹配。
如果用户名和密码不匹配,它会一遍又一遍地询问您的用户名和密码。
之后,将从用户类创建一个用户,依此类推。。。
问题是:
当您在第一次尝试时键入凭据时,一切正常。
但当您键入错误的凭据时,应用程序将再次提示输入用户名和密码,login()函数将返回用户名,但不会将其分配给用于创建用户的变量。
login()函数:
from Login.loginValidator import loginValidator
def login():
validator = loginValidator()
username = input("Enter Username: ")
password = input("Enter Password: ")
result = validator.validateLogin(username, password)
if result:
print(username)
return username
else:
login()
loginValidator类:
class loginValidator:
def validateLogin(self, username, password):
def checkIfUsernameExists(username):
connection = psycopg2.connect(
"dbname={} user={} host={} password={}".format(dbname, dbuser, dbhost, dbpassword))
cursor = connection.cursor()
cursor.execute("SELECT username FROM clientstandardinfo WHERE username = %s", [username])
result = cursor.fetchone()
cursor.close()
connection.close()
gc.collect()
if result is not None:
return True
result = checkIfUsernameExists(username)
if result:
connection = psycopg2.connect(
"dbname={} user={} host={} password={}".format(dbname, dbuser, dbhost, dbpassword))
cursor = connection.cursor()
cursor.execute("SELECT password FROM clientstandardinfo WHERE username = %s", [username])
passResult = cursor.fetchone()[0]
if sha256_crypt.verify(password, passResult):
print("Login Success")
return True
else:
print("Wrong password")
return False
else:
print("Username doesn't exist")
return False
getUserInfo函数:
def getUserInfo(clientUsername):
print("username from getUserInfo: \n", clientUsername)
connection = psycopg2.connect("dbname={} user={} host={} password={}".format(dbname, dbuser, dbhost, dbpassword))
cursor = connection.cursor()
cursor.execute("SELECT * FROM clientstandardinfo WHERE username = %s",[clientUsername])
result = cursor.fetchone()
print("Result from getUserInfo: \n",result)
cursor.close()
connection.close()
#1=firstname, 2=lastname, 3=username, 4=password,
# 5=email, 6=dateOfBirth, 7=gender, 8=admin, 9=dateofregister
return result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9]
main()函数:
def main():
username = login()
print("MAIN FUNCTION - username:\n",username)
client_user = User(*getUserInfo(username))
输出为(第一次键入错误的凭据后):
<prints correct username that comes from print in login() function>
MAIN FUNCTION - username:
None
username from getUserInfo:
None
Result from getUserInfo:
None
Traceback (most recent call last):
File "/Users/mac/Dropbox/banking raw/main.py", line 24, in <module>
main()
File "/Users/mac/Dropbox/banking raw/main.py", line 16, in main
client_user = User(*getUserInfo(username))
File "/Users/mac/Dropbox/banking raw/db.py", line 22, in getUserInfo
return result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9]
TypeError: 'NoneType' object is not subscriptable
Process finished with exit code 1
我不太明白为什么它不起作用。希望你能理解我的解释
我将感谢你的帮助。另外,如果您非常欢迎任何关于代码“质量”的反馈。你知道吗
您忘记了
return
函数上的login
:相关问题 更多 >
编程相关推荐