拼写检查和案例不敏感

时间:2015-08-31 18:23:02

标签: python oop debugging sqlalchemy spelling

我目前在type方法中进行了retrieve_user检查。

  1. 我想为传入的新用户对象添加不区分大小写,并且......

  2. 检查拼写准确性条目(在这种情况下为username的{​​{1}}) - 然后抛出user条消息拼写错误的调试。

  3. 我认为当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')

1 个答案:

答案 0 :(得分:2)

拼写准确性有点难以检查,可能是一项昂贵的操作。首先,您需要实现一个度量标准,表示两个单词彼此之间的距离。 Levenshtein distance是个不错的选择。现在,当找到用户名失败时,您将需要计算所有人的距离  用户名 - 可以通过仅包含前几个字符匹配的用户名来降低这一点,因为这些用户名不太适合键入错误。然后,您可以返回最接近的匹配作为可能的用户名。

请注意,恶意用户可以使用此功能在系统中查找用户名