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':'姓名列和身份证列不匹配!'})