Я пытаюсь, чтобы эта функция ограничивала пользователя только одним голосом за изображение. Однако в настоящее время он пропускает все голоса. Если я изменил «if existing_vote! = 0:» на «if existing_vote == 0:», он не пропускает никаких голосов. Мысли?VoteHandler в Google App Engine
класс VoteHandler (webapp.RequestHandler):
def get(self):
#See if logged in
self.Session = Session()
if not 'userkey' in self.Session:
doRender(
self,
'base/index.html',
{'error' : 'Please login to vote'})
return
#If user hasn't voted - if user doesn't have a vote on that image object
key = self.request.get('photo_id')
vurl = models.Image.get_by_id(int(key))
#pull current site vote total & add 1
existing_vote = models.Vote.all().filter('user=', self.Session['userkey']).filter('photo=',vurl).count()
if existing_vote != 0:
self.redirect('/', { })
else:
newvote = models.Vote(user=self.Session['userkey'], url=vurl)
vurl.votes += 1
vurl.put()
logging.info('Adding a vote')
#Create a new Vote object
newvote = models.Vote(user=self.Session['userkey'], url=vurl)
newvote.put()
self.redirect('/', { })
Для моделей:
класс пользователя (db.Model):
счет = db.StringProperty()
password = db.StringProperty()
имя = db.StringProperty()
создано = db.DateTimeProperty (auto_now = True)
класс Image (db.Model):
пользователя = db.ReferenceProperty (Пользователь)
photo_key = db.BlobProperty()
сайт = db.StringProperty()
текст = db.StringProperty()
создано = db.DateTimeProperty (auto_now = True)
голосов = db.IntegerProperty (по умолчанию = 1)
класс Голосов (db.Model):
пользователя = db.ReferenceProperty (пользователь) #See, если голосование на этом сайте еще
фото = db.ReferenceProperty (Изображение) # по применить голосование по правому URL
upvote = db.IntegerProperty (по умолчанию = 1)
создано = db.DateTimeProperty (auto_now = True)
Что такое счет? Добавьте оператор регистрации и попытайтесь выяснить, что это действительно возвращает: existing_vote = models.Vote.all(). Filter ('user =', self.Session ['userkey']). Filter ('photo =' , vurl) .count() Лучшей реализацией будет создание класса голосования в качестве дочернего объекта Пользователя в группе лиц с ключом photoId. Отключить тему, но не могли бы вы спросить, почему вы внедрили свой собственный пользовательский класс вместо использования учетных записей Google или OpenID? –
1. Журналы показывают existing_vote = 0 2. n00b здесь, и ушел из учебника в книге, которая создала класс пользователя ... – Emile