0

現在、有効なtypeチェックインretrieve_user方法があります。

  1. 着信する新しいユーザー オブジェクトの大文字と小文字を区別しないようにしたいのですが...

  2. エントリ (この場合usernameは a ) のスペルの正確さをチェックします。次に、スペルミスのデバッグ用のメッセージをスローします。userError

a のつづりが間違っているNotFoundError場合は、フラグを立てる必要があると思います。username間違ったユーザー名は何もしないため、これは機能していないようです。

コード:

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 が解決されました: filter(func.lower(User.username) == func.lower(something_unique)).first()

4

1 に答える 1

2

スペルの正確さを確認するのは少し難しく、費用のかかる操作になる可能性があります。まず、2 つの単語がどれだけ近いかを表すメトリックを実装する必要があります。レーベンシュタイン距離は良いオプションです。ユーザー名の検索に失敗した場合、すべてのユーザー名からの距離を計算する必要があります。これは、最初の数文字が一致するユーザー名のみを含めることで、間違って入力される可能性が低くなるため、低くすることができます。次に、最も近い一致を可能性の高いユーザー名として返すことができます。

ただし、悪意のあるユーザーがこの機能を使用して、システム内のユーザー名を見つける可能性があることに注意してください

于 2015-09-10T23:28:04.360 に答える