Note that there are some explanatory texts on larger screens.

plurals
  1. POVoteHandler in Google App Engine
    text
    copied!<p>I am trying to have this function limit a user to only one vote per image. However it currently lets all votes through. If I change "if existing_vote != 0:" to "if existing_vote == 0:" it lets no votes through. Thoughts? </p> <p>class VoteHandler(webapp.RequestHandler):</p> <pre><code>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 &amp; 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('/', { }) </code></pre> <p>For the Models:</p> <p><strong>class User(db.Model):</strong></p> <p>account = db.StringProperty()</p> <p>password = db.StringProperty()</p> <p>name = db.StringProperty()</p> <p>created = db.DateTimeProperty(auto_now=True)</p> <p><strong>class Image(db.Model):</strong></p> <p>user = db.ReferenceProperty(User)</p> <p>photo_key = db.BlobProperty()</p> <p>website = db.StringProperty()</p> <p>text = db.StringProperty()</p> <p>created = db.DateTimeProperty(auto_now=True)</p> <p>votes = db.IntegerProperty(default=1)</p> <p><strong>class Vote(db.Model):</strong></p> <p>user = db.ReferenceProperty(User) #See if voted on this site yet</p> <p>photo = db.ReferenceProperty(Image) #To apply vote to right URL</p> <p>upvote = db.IntegerProperty(default=1)</p> <p>created = db.DateTimeProperty(auto_now=True) </p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload