examtest/test_server/analyse/views.py

79 lines
3.2 KiB
Python

from django.shortcuts import render
from requests.api import request
from rest_framework.views import APIView
from rest_framework.response import Response
from crm.models import Consumer
from examtest.models import ExamTest
from question.models import Question
import pickle
import requests
from lxml import etree
# Create your views here.
class BasicCount(APIView):
'''
获取基本统计数据
'''
def get(self, request, format=None):
ret={}
ret['consumer1_count'] = Consumer.objects.filter(is_delete=False).count()
ret['consumer2_count'] = Consumer.objects.filter(is_delete=False).exclude(create_admin=None).count()
ret['test_count'] = ExamTest.objects.filter(is_delete=False).count()
ret['question_count'] = Question.objects.filter(is_delete=False).count()
return Response(ret)
class Quota(APIView):
'''
获取考试名额
'''
def get(self, request, format=None):
with open('quota.dat','rb') as f:
data = pickle.load(f)
return Response(data)
class SearchCandidates(APIView):
perms_map = [
{'post': 'candidate_search'}]
def post(self, request, *args, **kwargs):
names = request.data['names']
numbers = request.data['numbers']
names_ = names.split('\n')
numbers_ = numbers.split('\n')
names_l = [i.replace(' ', '') for i in names_ if i!='']
numbers_l = [i.replace(' ', '') for i in numbers_ if i!='']
candidates = []
if len(names_l)>60:
return Response({'error':'单次批量查询不允许超过60'})
if len(names_l) == len(numbers_l):
for i in range(len(names_l)):
payload = {'IndexModel[name]': names_l[i], 'IndexModel[identityNumber]': numbers_l[i], 'IndexModel[certNumber]':'', 'IndexModel[candidateNumber]':''}
try:
r = requests.post('https://fushe.chinansc.cn/open/candidate-list',data=payload, timeout=5)
r.raise_for_status()
r.close()
html = etree.HTML(r.text)
results = html.xpath("//table[@class='cert-table']")
try:
for i in results:
url = i.xpath('tr/td/a/@href')
name = i.xpath('tr[1]/td[1]/text()')
ID_number = i.xpath('tr[1]/td[2]/text()')
report_number = i.xpath('tr[2]/td[1]/text()')
issue_date = i.xpath('tr[2]/td[2]/text()')
jsondata = {
'name':name[0],
'ID_number':ID_number[0],
'report_number':report_number[0],
'issue_date':issue_date[0],
'url':'https://fushe.chinansc.cn'+ url[0]
}
candidates.append(jsondata)
except:
pass
except:
pass
return Response(candidates)
else:
return Response({'error':'姓名列和身份证列不匹配!'})