2013-11-13 4 views
0

Я беру курс Udacity по веб-разработке, который учит в db.Model. Я бы хотел сделать это в ndb.Путаница между Appengine Datastore db и ndb

Любая помощь будет оценена по достоинству. Я имею много неприятностей перевод следующий db.Model код ndb.Model:

class User(db.Model): 
    name = db.StringProperty(required = True) 
    pw_hash = db.StringProperty(required = True) 
    email = db.StringProperty() 

    @classmethod 
    def by_name(cls, name): 
     u = User.all().filter('name =', name).get() 
     # My Attempt: 
     # u = User.query(cls.username).get 
     return u 

    @classmethod 
    def login(cls, name, pw): 
     u = cls.by_name(name) 
     if u: 
      return u 

Я считаю, что этот набор classmethod стремиться вернуть объект пользователя, учитывая его свойство «имя пользователя», если он существует. Я благодарен за любой совет! Спасибо за прочтение.

+0

также взглянуть на Cheatsheet https://docs.google. ком/документ/д/1AefylbadN456_Z7BZOpZEXDq8cR8LYu7QgI7bt5V0Iw/mobilebasic –

ответ

0

Многие вещи в ndb имеют одинаковое имя и работают так же, как и в db, поэтому изменение свойств довольно просто. Вместо .all() вы вызываете query на экземпляр модели. Фильтрация осуществляется с помощью операторов сравнения питона, со свойством модели на левой стороне (обратное может работать как хорошо, никогда не пробовал.

class User(ndb.Model): 
    name = ndb.StringProperty(required = True) 
    pw_hash = ndb.StringProperty(required = True) 
    email = ndb.StringProperty() 

    @classmethod 
    def by_name(cls, name): 
     u = cls.query().filter(User.name == name).get() 
     return u 

    @classmethod 
    def login(cls, name, pw): 
     u = cls.by_name(name) 
     if u: 
      return u 
Смежные вопросы