Ключи или идентификаторы в Google App Engine с Python - PullRequest
3 голосов
/ 28 января 2011

Привет, я ранее задал вопрос об использовании ключей, на который был дан отличный ответ.

Однако теперь мне интересно, если создание и использование ключей для моих моделей - это путь, мне сказалимой парень из iPhone App, который нам нужен INT для хранения в базе данных.Я получил свой код Python, работающий с ключами, и теперь, возможно, придется вернуться.

Мне бы очень хотелось услышать ваше мнение по поводу создания ключевых имен и автоматической генерации идентификаторов, которые мое приложение iPhone может использовать без каких-либо значительных изменений.

Вот мои модели:

class User(db.Model):
   id = db.StringProperty()
   name = db.StringProperty()
   image = db.BlobProperty(default=None)

class Book(db.Model):
   image = db.BlobProperty()
   date_added = db.DateTimeProperty(auto_now_add=True)
   is_active = db.BooleanProperty(default=True)

class BookUser(db.Model):
   book = db.ReferenceProperty(Book)
   user = db.ReferenceProperty(User)
   is_active = db.BooleanProperty(default=True)

И как я справлялся с ними, используя ключи (ниже).Каждый раз, когда Пользователь регистрируется в записи BookUser, создается, если она еще не существует.Мне нужно отправить все эти данные на iPhone с идентификаторами для хранения в базе данных.Ниже выглядит довольно солидно, практический человек, который думает, что я должен сказать разработчику iPhone «смириться»:)

Или может быть решено следующее лучше?

### Get the Users Details
user_id = 1
user = User.get_by_key_name(user_id)
user_key = user.key().name()

### Get the latest active Book
book = Book.all().filter('is_active =', True).get()
book_key = book.key().name()

### Get latest Book for this User
bookuser_key_name = "%s:%s" % (str(book_key), str(user_key))
bookuser = BookUser.get_or_insert(bookuser_key_name)
bookuser.card = card
bookuser.user = user
bookuser.put()

Ответы [ 2 ]

1 голос
/ 22 октября 2011

Вы, вероятно, хотите избежать использования только "id" для имен полей. Это может быть перепутано с идентификатором ключа данных () при кодировании. http://code.google.com/appengine/docs/python/datastore/keyclass.html

user_id - хороший выбор.

Ваш "парень из iPhone", желающий использовать целые, очень беспокоит. Вы действительно не хотите зависеть или использовать последовательные значения int для идентификаторов. Помимо сложностей с корректировкой в ​​кластерных средах, это может привести к проблемам безопасности, когда идентификаторы становятся легко угадываемыми.

0 голосов
/ 28 января 2011

Использование имен клавиш, как вы выглядите хорошо.У вашего разработчика iPhone есть конкретная причина, по которой он не хочет, чтобы вы их использовали?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...