Esempio n. 1
0
def vote(request, pageNum):
    # print('要第几页数据', pageNum)
    if not pageNum:
        pageNum = 1
    # 	获取用户IP
    ip = getUserIP(request)
    # 把本机地址传到页面,页面才能显示新增候选者按钮
    dictData = {'userName': getUser(request).uName}

    #  获取候选者
    candidates = Candidate.cManager.filter(cVoteType__vType__contains='编程').order_by('-cVotes')
    # 用户投票结果列表
    isVoteLists = []
    for candidate in candidates:
        # print(candidate.cName, '的票数为', candidate.cVotes)
        # 判断当前IP今天是否已经对该候选者投过票
        isVote = opeVoteRecordT.query(vCandidateId_id=candidate.id, isDelete=0, vTypeId_id=candidate.cVoteType_id,
                                      vComIP=ip,
                                      vDate=datetime.datetime.now().__format__('%Y-%m-%d'))

        if isVote.exists():
            isVoteLists.append(candidate.id)

    dictData['isVoteLists'] = isVoteLists
    # 获取留言信息
    chatRecords = ChatRecord.crManager.filter(crType=candidates.first().cVoteType_id)
    if chatRecords.exists():
        dictData['messages'] = chatRecords

    # 构建分页器对象,candidates=候选者列表,5=每页显示的个数
    paginator = Paginator(candidates, 5)
    # 获取第n页的页面对象
    page = paginator.page(pageNum)

    # Paginator和Page的常用API
    # page.previous_page_number()
    # page.next_page_number()
    # page.has_previous()
    # page.has_next()

    # 构造页面渲染的数据
    '''
    渲染需要的数据:
    - 当前页的候选者对象列表
    - 分页页码范围
    - 当前页的页码
    '''

    if request.method == 'GET':
        # 当前页的候选者对象列表
        dictData['page'] = page
        # 分页页码范围
        dictData['pagerange'] = paginator.page_range
        # 当前页的页码
        dictData['currentpage'] = page.number

    return render(request, 'SitesApp/vote.html', context=dictData)
Esempio n. 2
0
def addVote(request):
    cid = request.GET.get('cid', None)
    if not cid:
        return JsonResponse({'status': 0, 'msg': 'no cid'})
    # 获取候选者信息
    candidate = Candidate.cManager.get(pk=cid)
    poills = candidate.cVotes
    ip = getUserIP(request)
    data = {'status': 0, 'msg': 'vote failed'}
    # 判断当前IP今天是否已经对该候选者投过票
    isVote = opeVoteRecordT.query(
        vCandidateId_id=cid,
        vTypeId__vType__contains='编程',
        vComIP=ip,
        vDate=datetime.datetime.now().__format__('%Y-%m-%d')).first()
    # isDelete初始值为0,表示记录没有被逻辑删除,用户再次点击投票就把记录删除,isDelete置为1
    if isVote:
        data['status'] = 2
        data['msg'] = 'already voted'
        # isDelete为True表示取消投票
        if isVote.isDelete:
            poills += 1
        else:
            poills -= 1
        # 修改投票记录
        if not opeVoteRecordT.modify(isVote.id, isDelete=not isVote.isDelete):
            # print('修改投票记录失败')
            return JsonResponse(data)
        # print('现在是取消(True)还是投票(False)', isVote.isDelete)
        # 修改候选者票数
        if not opeCandidateT.modify(candidate.id, cVotes=poills):
            # print('修改候选者记录失败')
            return JsonResponse(data)

    else:
        user = getUser(request)
        if not user:
            return JsonResponse(data)
        # 增加投票记录
        if not opeVoteRecordT.add(vUserId_id=user.id,
                                  vCandidateId_id=candidate.id,
                                  vComIP=ip,
                                  vTypeId_id=candidate.cVoteType_id,
                                  vPolls=1,
                                  vTimes=1):
            return JsonResponse(data)
        # 修改候选者票数
        if not opeCandidateT.modify(candidate.id, cVotes=candidate.cVotes + 1):
            return JsonResponse(data)
    data['status'] = 1
    data['msg'] = 'success'
    data['poills'] = poills
    return JsonResponse(data)
Esempio n. 3
0
def grade(request):
    dictData = {}
    vtype = opeVoteTypeT.query(vType__contains='打分').first()
    if vtype:
        candidates = Candidate.cManager.filter(cVoteType_id=vtype.id).order_by('cPinyin')
    else:
        return render(request, 'SitesApp/grade.html', context=dictData)

    dictData = {'candidates': candidates}
    ip = getUserIP(request)
    whoId = request.GET.get('whoId', None)
    times = request.GET.get('times', None)
    if whoId and whoId != '0':
        # 判断用户是否已经打分,
        isVote = opeVoteRecordT.query(vTimes=times, vCandidateId_id=whoId, vComIP=ip,
                                      vDate=datetime.datetime.now().__format__('%Y-%m-%d')).first()
        if isVote:
            # 用户已经打分,打分按钮就显示红色
            dictData['done'] = 1
        candidate = candidates.get(id=whoId)
        dictData['who'] = candidate
        # 获取打分记录
        voteRecords = opeVoteRecordT.query(vCandidateId_id=whoId, vTimes=times,
                                           vDate=datetime.datetime.now().__format__('%Y-%m-%d'))
        if voteRecords.exists():
            dictData['voteRecords'] = voteRecords
            # 统计分数
            dictData['grade'] = voteCount(voteRecords)
        # 获取留言信息
        now = datetime.datetime.now()
        start = now - datetime.timedelta(hours=now.hour, minutes=now.minute, seconds=now.second,
                                         microseconds=now.microsecond)
        chatRecords = ChatRecord.crManager.filter(crTopic=whoId, crDateTime__gt=start, crType=candidate.cVoteType_id)
        if chatRecords.exists():
            dictData['messages'] = chatRecords

    dictData['userName'] = getUser(request).uName
    dictData['times'] = 1
    return render(request, 'SitesApp/grade.html', context=dictData)
Esempio n. 4
0
def addGrade(request):

    whoId = request.POST.get('whoId', None)
    times = request.POST.get('times', None)
    grades = request.POST.get('grades', None)
    data = {'status': 0, 'msg': 'no whoId'}
    if not whoId:
        return JsonResponse(data)

    # 获取候选者信息
    candidate = Candidate.cManager.get(id=whoId)

    # 获取用户IP
    ip = getUserIP(request)
    user = getUser(request)

    # 判断用户是否已经打分,
    isVote = opeVoteRecordT.query(
        vTimes=times,
        vCandidateId_id=whoId,
        vComIP=ip,
        vDate=datetime.datetime.now().__format__('%Y-%m-%d')).first()
    if isVote:
        # print('已经投过票了')
        return JsonResponse({'status': 0, 'msg': 'already grade'})

    # 若用户还没有打分就添加打分记录
    if not opeVoteRecordT.add(vUserId_id=user.id,
                              vCandidateId_id=candidate.id,
                              vComIP=ip,
                              vTypeId_id=candidate.cVoteType_id,
                              vPolls=grades,
                              vTimes=times):
        # print('新增打分记录出错')
        return JsonResponse({'status': 0, 'msg': 'add voteRecord faild'})
    # 候选者打分人数加1
    if not opeCandidateT.modify(candidate.id, cVotes=candidate.cVotes + 1):
        # print('修改候选者记录出错')
        return JsonResponse({
            'status': 0,
            'msg': 'modify candidateRecord faild'
        })
    # print('给谁打分', whoId, '第几轮', times, '多少分:', grades)
    # print('运行到这里啦')
    data = {'status': 1, 'msg': 'success'}
    # print(type(data), '***', data)
    return JsonResponse(data)