Example #1
0
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)
Example #2
0
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()
Example #3
0
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()
    })
Example #4
0
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))
Example #5
0
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
    })
Example #6
0
    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 ;)")
Example #7
0
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})
Example #8
0
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()
    })
Example #9
0
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))