我目前在type
方法中进行了retrieve_user
检查。
我想为传入的新用户对象添加不区分大小写,并且......
检查拼写准确性条目(在这种情况下为username
的{{1}}) - 然后抛出user
条消息拼写错误的调试。
我认为当Error
拼写不正确时,我的NotFoundError
会抛出一个标记。似乎这不起作用,因为错误的用户名没有做任何事情。
代码:
username
问题1已解决:
def create_user(self, username, password, firstname, lastname, email):
new_user = User(username, password, firstname, lastname, email)
self.session.add(new_user)
self.session.commit()
print(username, firstname, lastname)
def retrieve_user(self, something_unique):
if isinstance(something_unique, int):
return self.session.query(User).\
filter(User.user_id == something_unique).one()
elif isinstance(something_unique, basestring):
return self.session.query(User).\
filter(func.upper((User.username == something_unique))).first() #<DOESNT WORK! results in no entry and no error message
if NoResultFound:
raise NotFoundError('No results found')
elif MultipleResultsFound:
raise MultipleResultsFound('Too many results found')
elif isinstance(something_unique, User):
return something_unique
else:
raise ValueError('Value being passed is an object')
答案 0 :(得分:2)
拼写准确性有点难以检查,可能是一项昂贵的操作。首先,您需要实现一个度量标准,表示两个单词彼此之间的距离。 Levenshtein distance是个不错的选择。现在,当找到用户名失败时,您将需要计算所有人的距离 用户名 - 可以通过仅包含前几个字符匹配的用户名来降低这一点,因为这些用户名不太适合键入错误。然后,您可以返回最接近的匹配作为可能的用户名。
请注意,恶意用户可以使用此功能在系统中查找用户名