2017-01-01 1 views
2

내 Appengine (ndb 사용) 애플리케이션에서 사용자를 저장하고 사용자 이름과 이메일이 고유해야합니다. 진행 상황을 업데이트 할 수 있어야합니다 (이전에 저장된 레벨보다 높으면 레벨 저장). 이메일 및 PW 변경 및 계정 삭제.Appengine ndb - 조상없이 고유 한 사용자 이름과 이메일을 유지하는 방법?

트랜잭션에서 조상없이 쿼리 할 수없는 것으로 나타났습니다. 하지만 조상을 만드는 것은 해결 방법이 아닙니다. 앱이 인기를 얻으면 초당 1 쓴 글을 쓸 수 없기 때문입니다. 그래서 나는 또 다른 해결책이 필요하다.

키를 사용할 수 있습니까? 예, 그렇다고 사용자 이름을 고유하게 만 만드는 경우 아무도 다른 계정의 이메일을 다시 사용하지 않도록하려면 어떻게해야합니까?

답변

2

전자 메일 주소 만 예약하기 위해 존재하는 엔티티와 함께 ​​크로스 그룹 트랜잭션을 사용할 수 있어야합니다.

User 엔티티의 경우 사용자 이름을 키 이름으로 사용할 수 있습니다. 사용자를 만들 때 사용자의 전자 메일 주소를 키 이름으로 사용하여 EmailReservation 엔터티를 만듭니다.

그런 다음 새 사용자 생성하기 위해 교차 그룹 트랜잭션을 사용

@ndb.transactional(xg=True) 
def create_user(user_name, email): 
    user = User.get_by_id(user_name) 
    email_reservation = EmailReservation.get_by_id(email) 
    if user or email_reservation: 
     # Either the user_name or email is already in use so stop 
     return None 
    # Create the user and reserve the email address so others can't use it 
    user = User(id=user_name) 
    email_reservation = EmailReservation(id=email) 
    ndb.put_multi(user, email_reservation) 
    return user 
관련 문제