- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Kivy 中创建一个应用程序。我正在创建一个登录页面,允许用户输入密码和用户名,以验证他们以前是否使用过我的应用程序。我将用户名和密码存储在名为“users”的 MySQL 数据库中,该表称为“login”,将用户名和密码信息存储在两列中。我正在使用 pymysql 库与我的 Python 代码和 MySQL 数据库进行交互。
在我的 Python 代码中,我使用 fetchall() 方法从 MySQL 获取所有用户名和密码列和行,并将该数据存储在变量中。当我打印出该数据时,我得到一个显示以下内容的字典列表:
[{'username': 'sample_username', 'password': 'sample_password'},
{'username': 'sample_username2', 'password': 'sample_password2'}]
正如您在 MySQL 中看到的,我创建了几个示例用户名和示例密码,当使用 fetchall() 方法时,它们存储在列表中的字典中。
接下来,我在 Kivy 中创建了一个用于用户名的文本输入框,以及一个用于密码。我将用户输入存储在用户名和密码的变量中,如下所示:
self.username = self.ids.textinput_username.text
self.password = self.ids.textinput_username.text
然后,在使用 fetchall() 方法后,我检查用户输入的用户名和密码是否与我的代码中已有的用户名或密码匹配。
if self.username in results:
print("That username is stored")
if self.password in results:
print("That is a valid password")
但是,该代码根本没有返回任何内容。就好像Python不能跟踪用户输入的用户名,无法检查它是否在使用 fetchall 方法后得到的结果中。我什至尝试将结果存储在列表中,然后要求 Python 检查用户名和密码字符串是否位于列表中的任何位置。
login_list = []
for record in results:
login_list.append(record)
if self.username in login_list:
print("That username is valid")
if self.password in login_list:
print("That password is valid")
但是,当我输入该内容时,我遇到了同样的问题。 Python 不执行任何操作,也不会执行条件语句。我连接到 pymysql 和我的 MySQL 数据库,并将所有登录信息存储在一个模块中并将其导入。我知道我已正确连接,因为当我打印列表中的字典时,它会获取我存储在 MySQL 中的所有信息。下面是我的完整代码,减去导入:
class WelcomeScreen(Screen):
#A basic welcome screen. All of the functionality is in the .kv file
pass
class LoginScreen(Screen):
'''
Model a screen for the user to enter a username
and password.
'''
def store_username_password(self):
'''
get the username and password from textinput.
Check to see if the username and password is
stored in mysql database. If not, give the
user an error message
'''
#Create a variable to store the username entered in textinput
self.username = str(self.ids.textinput_username.text)
#Create a variable to store the password entered in textinput
self.password = str(self.ids.textinput_password.text)
#select the login table from the patient_support database
cur.execute("""SELECT * FROM login""")
#Use the fetchall method of the cursor object to get the info
results = cur.fetchall()
#If username and password entered in results, print statements
if self.username in results:
print("That is a valid username")
if self.password in results:
print("That is a valid password")
class ScreenManagement(ScreenManager):
pass
presentation = Builder.load_file("patientsupport.kv")
class PatientSupport(App):
def build(self):
return presentation
if __name__=='__main__':
PatientSupport().run()
最佳答案
根据docs :
x in s
evaluates to True if x is a member of s, and False otherwise.
records = [
{
'username': 'sample_username',
'password': 'sample_password'
},
{
'username': 'sample_username2',
'password': 'sample_password2'
}
]
records
的成员是两个字典,但 self.username 是一个 str 。因为records
没有 str 是成员,self.username 不能是 in
记录列表。
相反,您需要执行以下操作:
for record in records:
if record["username"] == "sample_username":
print("That username is stored")
if record["password"] == "sample_password":
print("That is a valid password")
输出:
That username is stored
That is a valid password
(但请注意:该密码对该用户名无效)
要检查有效的用户名和匹配的密码,您需要执行以下操作:
for record in records:
if (record["username"] == "sample_username"
and record["password"] == "sample_password"):
print("Valid user!")
当您尝试此操作时:
login_list = []
for record in results:
login_list.append(record)
你所做的就是将每个字典移到另一个列表中,然后再次出现 str
永远不会找到类型 in
dict
的列表类型。
如果你有这样的事情:
records = [
{
'username': 'sample_username',
'password': 'sample_password'
},
{
'username': 'sample_username2',
'password': 'sample_password2'
},
"some string"
]
然后你会看到输出“yes”:
if "some string" in records:
print("yes")
在本例中,记录的三个成员是两个字典和一个字符串。
文档继续说:
in
tests whether the dictionary has a given key.
这意味着你可以写这样的东西:
for record in records:
if 'username' in record:
print('yes')
--output:--
yes
yes
但这对你没有帮助。
关于python - 用户名 密码找回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48827526/
我正在使用 Scrapy 1.5.1 和 Python 2.7.6。我正在尝试从以下 page 中抓取用户名. 我已经实现了以下代码: # -*- coding: utf-8 -*- import s
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我是一名优秀的程序员,十分优秀!