def vote(request, tid): """ 用户给某个主题投票 """ tp = get_object_or_404(Topic, pk=tid) comment = request.POST.get('comment', ' ') try: Vote.objects.get(topic=tp, member=request.user) except Vote.DoesNotExist: vote = Vote(topic=tp, member=request.user, comment=comment) vote.save() return HttpResponseRedirect('/topic/%s/' % tid)
def vote(request,image_id,value): cookie_key = "image_%s"%image_id days_expire = 1 if request.is_ajax and not request.COOKIES.get(cookie_key): try: user_ip = get_client_ip(request) time_ago = datetime.datetime.now()-datetime.timedelta(days=days_expire) Vote.objects.get(user_ip=user_ip,created__gt=time_ago,image_id=image_id) except ObjectDoesNotExist: response = HttpResponse() try: image = Image.objects.get(pk=image_id) except ObjectDoesNotExist: return response vote = Vote() vote.value = 1 if value=='up' else -1 vote.user_ip = user_ip vote.image = image vote.created = datetime.datetime.now() vote.save() image.rating = Vote.objects.filter(image=image)\ .aggregate(sum=Sum('value')).get('sum') image.save() recalc_sizes(image.miracle) image =Image.objects.get(id=image.pk) new_data = {'rating':image.rating,'id':image.pk,'size':image.size} new_data_encoded = json.dumps(new_data) response.write(new_data_encoded) set_cookie(response,cookie_key,True,days_expire) return response return HttpResponse()
def page(request): """ Ajax view in order to enable infinite scroll on images view. """ if 'category' in request.GET and request.GET['category']: category = get_object_or_404(Category, pk=int(request.GET['category'])) images = category.image_set.all() # TODO fold this ordering into the above query images = sorted(images, key=lambda im: VoteCount.get_vote_count(image_id=im.pk, cat_id=category.pk), reverse=True) p = Paginator(images, IMAGES_PER_PAGE) else: p = Paginator(Image.objects.order_by("-created"), IMAGES_PER_PAGE) page_num = request.GET['page'] page = p.page(page_num) images = [] for im in page.object_list: categories = [] for cat in im.categories.all(): has_voted_up = has_voted_down = "" if request.user.is_authenticated(): has_voted_up = Vote.check_user_vote_type(user=request.user, image=im.pk, category=cat.pk, score=1) has_voted_down = Vote.check_user_vote_type(user=request.user, image=im.pk, category=cat.pk, score=-1) categories.append({ "pk": cat.pk, "title": cat.title, "has_voted_up": has_voted_up, "has_voted_down": has_voted_down, "votes": VoteCount.get_vote_count(image_id=im.pk, cat_id=cat.pk) }) images.append({ "pk": im.pk, "caption": im.caption, "url": im.url, "source": im.source, "categories": categories }) return json_response({ "status": "ok", "images": images, "has_more_pages": page.has_next() })
def user_has_voted(context, image, category, score): if not context['user'].is_authenticated(): return "" return Vote.check_user_vote_type(user=context['user'], image=image, category=category, score=int(score))
def vote(request): if not request.user.is_authenticated(): return json_response({ "status": "fail", "why": "login" }) votes = Vote.submit_vote(request) return json_response({ "status": "ok", "votes": votes })
def test_just_3_votes_allowed(self): ideas = [Idea.Factory() for i in xrange(4)] votes = [Vote.Factory(user=self.user) for i in xrange(3)] data = { 'user': { 'id': self.user.id }, 'vote_type': 'idea', 'type_id': '/api/v1/ideas/%s/' % self.idea.id } response = self.client.post('/api/v1/votes/', content_type='application/json', data=json.dumps(data), **self.auth_header) logging.info(response) print[v for v in Vote.objects.all()] self.assertEqual(response.status_code, 400) response.json = json.loads(response.content) self.assertEqual(response.json['votes']['count'], "Oh boy, just 3 votes, don't be greedy ;)")
def vote(request): if not request.user.is_authenticated(): return json_response({"status": "fail", "why": "login"}) votes = Vote.submit_vote(request) return json_response({"status": "ok", "votes": votes})
def page(request): """ Ajax view in order to enable infinite scroll on images view. """ if 'category' in request.GET and request.GET['category']: category = get_object_or_404(Category, pk=int(request.GET['category'])) images = category.image_set.all() # TODO fold this ordering into the above query images = sorted(images, key=lambda im: VoteCount.get_vote_count( image_id=im.pk, cat_id=category.pk), reverse=True) p = Paginator(images, IMAGES_PER_PAGE) else: p = Paginator(Image.objects.order_by("-created"), IMAGES_PER_PAGE) page_num = request.GET['page'] page = p.page(page_num) images = [] for im in page.object_list: categories = [] for cat in im.categories.all(): has_voted_up = has_voted_down = "" if request.user.is_authenticated(): has_voted_up = Vote.check_user_vote_type(user=request.user, image=im.pk, category=cat.pk, score=1) has_voted_down = Vote.check_user_vote_type(user=request.user, image=im.pk, category=cat.pk, score=-1) categories.append({ "pk": cat.pk, "title": cat.title, "has_voted_up": has_voted_up, "has_voted_down": has_voted_down, "votes": VoteCount.get_vote_count(image_id=im.pk, cat_id=cat.pk) }) images.append({ "pk": im.pk, "caption": im.caption, "url": im.url, "source": im.source, "categories": categories }) return json_response({ "status": "ok", "images": images, "has_more_pages": page.has_next() })