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)
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)
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)
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)