我试图让这个功能限制用户每张图片只有一个投票。但是它目前可以让所有选票都通过。如果我将“if existing_vote!= 0:”更改为“if existing_vote == 0:”,它将不允许投票。思考?Google App Engine中的VoteHandler
类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 =真)
类Image(db.Model):
用户= db.ReferenceProperty(用户)
photo_key = db.BlobProperty()
网站= db.StringProperty()
文本= db.StringProperty()
创建= db.DateTimeProperty(auto_now =真)
票= db.IntegerProperty(缺省= 1)
类投票(db.Model):
用户= db.ReferenceProperty(用户)#See如果投在这个网站还
照片= db.ReferenceProperty(图)q若要申请投票向右URL
给予好评= 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? – 2010-09-01 23:09:59
1.日志显示existing_vote = 0 2. n00b在这里,并在创建用户类的书中去教程... – Emile 2010-09-01 23:13:55