这是我想要做的:
我已经建立了一个迷你系统,允许用户注册和等等,但系统非常依赖db_parse()
和user_exists()
,因为这是整个脚本运行的两个主要条件。
基本上我正在测试用户是否存在user_exists('username'),该用户应返回“True”(这是一个值为True / False的dict)。
所以,这是整个代码(请原谅我们的压力:
class __system():
def __init__(self):
self.usernames = []
self.passwords = []
self.dbname = 'database.txt'
self.privilege = [1,2,3]
self.backupdb = 'backup.txt'
def db_parse(self):
d = {'username':[],
'uid':[],
'password':[],
'pwdid':[]
}
with open(self.dbname,'r') as f:
lines = ([line.rstrip() for line in f])
f.flush()
for x in xrange(0,len(lines)):
if x%2==0:
d['username'].append(lines[x])
d['uid'].append(x) #-> number of line in the file
if x%2==1:
d['password'].append(lines[x])
d['pwdid'].append(x)
print lines
f.close()
return d
def user_exists(self, username=''):
d = {'exists': None,
'uid': None
}
db = self.db_parse()
ylen = len(db['username'])
for y in range(0,ylen):
if username == db['username'][y]:
d['exists'] = True
d['uid'] = db['uid'][y]
else:
d['exists'] = False
d['uid'] = None
return d
def main():
obj = __system()
print obj.user_exists('user1')
if __name__ == "__main__":
main()
'database.txt'
看起来像这样:
user1<br>
203ad5ffa1d7c650ad681fdff3965cd2<br>
user2<br>
6e809cbda0732ac4845916a59016f954<br>
我怎么能这样说...这有时可行,这不行,我已经连续10个小时调试了(是的,没错。)
我似乎无法理解为什么当用户明显存在时返回“False”和"uid:0"
然后,5分钟后,只重新粘贴代码,它确实有效。
答案 0 :(得分:0)
你会为此而踢自己,但问题在于:
for y in range(0,ylen):
if username == db['username'][y]:
d['exists'] = True
d['uid'] = db['uid'][y]
else:
d['exists'] = False
d['uid'] = None
return d
如果username
与文件中的第一个用户匹配,则for循环将继续传输到文件中的第二个用户,当然,这个用户不会匹配。所以它最终返回False / None。如果找到匹配项,您只需添加break
:
for y in range(0,ylen):
if username == db['username'][y]:
d['exists'] = True
d['uid'] = db['uid'][y]
break # Add this
else:
d['exists'] = False
d['uid'] = None
return d
另外,如果您使用f.close()
打开文件,则无需致电with open(...) as f
。离开with
块时,文件将自动关闭。您还应该使用for x, line in enumerate(lines):
代替for x in xrange(0, len(lines)):