def post(self, user): # grab the form form = LikeForm(self.request.params) username = user # grab the user (for their key) user = User.query(User.username == username).get() if user is None: self.redirect('/user/login') return # grab the post via what should be it's key try: post = Key(urlsafe=form.key.data).get() except Exception as e: post = None if post is None: self.redirect('/') return if user.username == post.author: error = 'you can\'t like or unlike you own post' self.render("index.html", error=error) return # is the post liked by this user already? try: liked = Like.query(Like.owner == user.key, Like.post == Key(urlsafe=form.key.data)).get() except Exception as e: print e.message liked = None # let's set the Like entity up and like the post try: if liked is None: # hasn't been liked yet liked = Like(owner=user.key, post=Key(urlsafe=form.key.data), liked=True) liked.put() else: liked.liked = True if liked.liked is False else False liked.put() # inc/dec the post likes if liked.liked is True: post.likes += 1 else: post.likes -= 1 post.put() # go back to the post! self.redirect('/post/view?key=%s' % post.key.urlsafe()) return except Exception as e: # go back to the post even if we fail to like it self.redirect('/post/view?key=%s' % post.key.urlsafe()) return
def post(self, user): # grab the form form = PostDeleteForm(self.request.params) # validate csrf if not self.validate_csrf(form.csrf_token.data): form.csrf_token.data = self.generate_csrf() self.r(form, flashes=flash('Please submit the form again.')) return # get the post please try: post = Key(urlsafe=form.key.data).get() except: post = None # as usual, this really shouldn't # be None unless unnatural navigation if post is None: self.redirect('/') return # the post exists, is it owned by the user? if post.author != user: self.redirect('/') return # check if the user is the owner or not if post.author != user: self.redirect('/') return # everything checks out so let's remove the post # first though, we need to remove the comments # assoc with the post and the likes # TODO query these entities to make sure they are removed comments = Comment.query(ancestor=post.key).fetch() ks = put_multi(comments) delete_multi(ks) likes = Like.query(Like.post == post.key).fetch() ks = put_multi(likes) delete_multi(ks) # got everything else removed, let's # remove the post try: post.key.delete() self.redirect('/') return except Exception as e: # let them try again form.csrf_token.data = self.generate_csrf() self.r(form, post, flashes=flash()) return
def get(self): # get the user user = self.validate_user() # we have the user and need to access their key to see if they liked the post # if they are not signed in then we don't show if they liked or not if user is not None: user = User.query(User.username == user).get() if user is not None: user = user.key # get the post key k = self.request.get('key', None) if k is None: self.redirect('/') return # create our form data for likes/comments formData = { 'key': k, 'csrf_token': self.generate_csrf() } # create our comment form form = CommentForm(data=formData) # create our like form like_form = LikeForm(data=formData) # try to retrieve the post based on the key try: post = Key(urlsafe=k).get() except: post = None # don't have the comments yet, or likes comments = None liked = None if post is not None: # grab the comments please comments = Comment.query(ancestor=post.key).order(-Comment.created).fetch() # grab likes # we also need to see if this user has "liked" the post already liked = Like.query(Like.owner == user, Like.post == post.key).get() self.r(form, like_form, post, comments, liked)
def get(self): # get the user user = self.validate_user() # we have the user and need to access their key to see if they liked the post # if they are not signed in then we don't show if they liked or not if user is not None: user = User.query(User.username == user).get() if user is not None: user = user.key # get the post key k = self.request.get('key', None) if k is None: self.redirect('/') return # create our form data for likes/comments formData = {'key': k, 'csrf_token': self.generate_csrf()} # create our comment form form = CommentForm(data=formData) # create our like form like_form = LikeForm(data=formData) # try to retrieve the post based on the key try: post = Key(urlsafe=k).get() except: post = None # don't have the comments yet, or likes comments = None liked = None if post is not None: # grab the comments please comments = Comment.query( ancestor=post.key).order(-Comment.created).fetch() # grab likes # we also need to see if this user has "liked" the post already liked = Like.query(Like.owner == user, Like.post == post.key).get() self.r(form, like_form, post, comments, liked)