def colldown_status(request): if request.method == 'POST': uid = request.POST.get('uid') resume_id = request.POST.get('resume_id') logger.info('{}用户要查询这个{}简历的状态了'.format(uid, resume_id)) data_status = checkresume_cdvu(uid, resume_id) return JsonResponse({ 'status': 200, 'msg': '状态查询成功', 'data': data_status })
def get_collsta(self, obj): resume_id = obj # 使用context参数来从前端获取传递的uid数据 uid = self.context['uid'] if not uid: data_status = { 'collect': False, 'down': False, 'view': False, 'upload': False, } return data_status return checkresume_cdvu(uid, resume_id)
def get_e_mail(self, obj): e_mail = obj.e_mail resume_id = obj.id uid = self.context['uid'] if not e_mail: return '--' if not uid: return e_mail[:3] + "****" + e_mail[7:] else: cdvu_obj = checkresume_cdvu(uid, resume_id) if cdvu_obj['down'] or cdvu_obj['view']: return e_mail else: return e_mail[:3] + '****' + e_mail[7:]
def get_phone(self, obj): phone = obj.phone resume_id = obj.id uid = self.context['uid'] if not phone: return '--' if not uid: return phone[:3] + '****' + phone[7:] else: cdvu_obj = checkresume_cdvu(uid, resume_id) if cdvu_obj['down'] or cdvu_obj['view']: return phone else: return phone[:3] + '****' + phone[7:]
def get_name(self, obj): resume_id = obj.id name = obj.name uid = self.context['uid'] if not name: return '--' if not uid: return namehidden(name) else: cdvu_obj = checkresume_cdvu(uid, resume_id) if cdvu_obj['down'] or cdvu_obj['view']: return name else: return namehidden(name)
def look_resume(request): if request.method == 'POST': uid = request.POST.get('uid') # 用户uuid resume_id = request.POST.get('resume_id') # 简历id check_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') logger.info('用户{}在【{}】查看了该{}简历的联系方式'.format(uid, check_time, resume_id)) user = SysMember.objects.get(id=uid) if not user: logger.info('系统校验到没有这个用户{}'.format(uid)) return JsonResponse({'status': 403, 'msg': '未查询到相关的用户信息或无此用户'}) resume = HrResumeBase.objects.filter(id=resume_id).first() if not resume: logger.info('这是一个无效{}简历,用户无法收藏'.format(uid, resume_id)) return JsonResponse({'status': 803, 'msg': '这不是个有效的简历'}) if not resume.integral: logger.info('在数据库中未找到这份简历{}的分值数据,需要管理员处理'.format(resume_id)) return JsonResponse({'status': 500, 'msg': '内部服务器错误'}) # 检查用户是否操作过该简历 # usercollect = HrUserResumeRelation.objects.filter(uid=uid, resume_id=resume_id).filter( # Q(type='view') | Q(type='down')).first() data_status = checkresume_cdvu(uid, resume_id) if data_status['down'] and data_status['view']: logger.info('用户{}查看并下载过该{}简历,【无需二次记录】'.format(uid, resume_id)) else: if not data_status['view']: usercollect = HrUserResumeRelation() usercollect.id = str(uuid.uuid1().hex) usercollect.uid = uid usercollect.resume_id = resume_id usercollect.type = 'view' if not data_status['down']: # 在准备扣取积分之前判断用户是否达到当日下载简历上限 num = today_resume_downloads(uid) if num > USER_DOWN_RESUME: return JsonResponse({ 'status': 412, 'msg': '已达到当然200封简历(下载或查看)上限,请明天下载' }) else: today_resume_downloads(uid, 'set') # 在简历没有查看也没有下载的状态下进行积分是否充足的判断 if user.integral == None or user.integral < resume.integral: logger.info('用户可用积分为:{},无法查看简历的联系方式'.format( user.integral)) return JsonResponse({'status': 408, 'msg': '可用积分不足'}) logger.info('用户并未{}查看和下载过该{}简历,开始扣分操作'.format( uid, resume_id)) # 将本次的扣分记录到库中 usercollect.integral = -resume.integral # 对用户的总分进行扣取 user.integral = user.integral - resume.integral user.save() logger.info('{}用户积分已扣取,目前剩余积分为:{}'.format( uid, user.integral)) # 开始记录积分轨迹 opt_create = SysMemberOpthistory() opt_create.id = str(uuid.uuid1().hex) opt_create.uid = uid opt_create.opt_type = 'view' opt_create.opt_cnt = 1 opt_create.cur_integral = -resume.integral opt_create.total_integral = user.integral opt_create.memo = '联系方式查看积分扣取' opt_create.create_time = datetime.datetime.now().strftime( '%Y-%m-%d %H:%M:%S') # 创建时间 opt_create.save() logger.info('本次{}用户查看{}简历的轨迹信息已记录'.format(uid, resume_id)) else: logger.info('用户{}下载过该{}简历,本次查看不扣积分'.format(uid, resume_id)) usercollect.integral = 0 usercollect.create_time = check_time usercollect.save() response_data = { 'status': 200, 'msg': '查询成功', 'data': { 'resume_id': resume_id, 'phone': resume.phone, 'e_mail': resume.e_mail, 'name': resume.name, } } return JsonResponse(response_data)
def download_file(request): if request.method == 'POST': uid = request.POST.get('uid') # 用户uuid resume_id = request.POST.get('resume_id') # 简历id download_time = datetime.datetime.now().strftime( '%Y-%m-%d %H:%M:%S') # 记录用户下载时间 logger.info('{}用户在{}下载了{}简历'.format(uid, download_time, resume_id)) user = SysMember.objects.get(id=uid) if not user: logger.info('在数据库中未查到该用户{}'.format(uid)) return JsonResponse({'status': 403, 'msg': '未查询到相关的用户信息或无此用户'}) resume = HrResumeBase.objects.filter(id=resume_id).first() if not resume: logger.info('在数据库中未找到这份简历{}'.format(resume_id)) return JsonResponse({'status': 803, 'msg': '这不是个有效的简历'}) if not resume.integral: logger.info('在数据库中未找到这份简历{}的分值数据,需要管理员处理'.format(resume_id)) return JsonResponse({'status': 500, 'msg': '内部服务器错误'}) # 用户积分可用的情况下判断用户是否有历史下载记录,有的话默认就不插入数据 # usercollect = HrUserResumeRelation.objects.filter(uid=uid, resume_id=resume_id).filter( # Q(type='down') | Q(type='view')).first() data_status = checkresume_cdvu(uid, resume_id) if data_status['down'] and data_status['view']: logger.info('用户{}查看并下载过该{}简历,【无需二次记录】'.format(uid, resume_id)) else: if not data_status['down']: usercollect = HrUserResumeRelation() usercollect.id = str(uuid.uuid1().hex) usercollect.uid = uid usercollect.resume_id = resume_id usercollect.type = 'down' if not data_status['view']: # 在准备扣取积分之前判断用户是否达到当日下载简历上限 num = today_resume_downloads(uid) if num > USER_DOWN_RESUME: return JsonResponse({ 'status': 412, 'msg': '已达到当然200封简历(下载或查看)上限,请明天下载' }) else: today_resume_downloads(uid, 'set') # 用户即没有查看也没有下载,那么在扣积分之前检查用户积分时候充足 if user.integral == None or user.integral < resume.integral: logger.info('用户可用积分为:{},积分不足无法下载'.format( user.integral)) return JsonResponse({'status': 408, 'msg': '可用积分不足'}) logger.info('用户并未{}查看和下载过该{}简历,开始扣分操作'.format( uid, resume_id)) # 将本次的扣分记录到库中 usercollect.integral = -resume.integral # 对用户的总分进行扣取 user.integral = user.integral - resume.integral user.save() logger.info('{}用户积分已扣取,目前剩余积分为:{}'.format( uid, user.integral)) # 开始记录积分轨迹 opt_create = SysMemberOpthistory() opt_create.id = str(uuid.uuid1().hex) opt_create.uid = uid opt_create.opt_type = 'down' opt_create.opt_cnt = 1 opt_create.cur_integral = -resume.integral opt_create.total_integral = user.integral opt_create.memo = '简历下载积分扣取' opt_create.create_time = datetime.datetime.now().strftime( '%Y-%m-%d %H:%M:%S') # 创建时间 opt_create.save() logger.info('本次{}用户下载{}简历的轨迹信息已记录'.format(uid, resume_id)) else: logger.info('用户{}查看过该{}简历,本次下载不扣积分'.format(uid, resume_id)) usercollect.integral = 0 usercollect.create_time = download_time usercollect.save() file_name = resume.name logger.info('用户{}下载的文件为:{}'.format(uid, file_name)) def file_iterator(file_path, chunk_size=512): """ 文件生成器,防止文件过大,导致内存溢出 :param file_path: 文件绝对路径 :param chunk_size: 块大小 :return: 生成器 """ with open(file_path, mode='rb') as f: while True: c = f.read(chunk_size) if c: yield c else: break file_url = resume.file_url.split('uploadFiles') try: # 设置响应头 # StreamingHttpResponse将文件内容进行流式传输,数据量大可以用这个方法 if platform.system() == 'Linux': response = StreamingHttpResponse( file_iterator(RESUME_FILE_URL + file_url[1])) # 以流的形式下载文件,这样可以实现任意格式的文件下载 response['Content-Type'] = 'application/octet-stream' # Content-Disposition就是当用户想把请求所得的内容存为一个文件的时候提供一个默认的文件名 response[ 'Access-Control-Expose-Headers'] = 'Content-Disposition' response['Content-Disposition'] = 'attachment;{};{}'.format( escape_uri_path(file_name), file_url[1].split('.')[1]) logger.info('{}文件已完成下载'.format(file_name + '.' + file_url[1].split('.')[1])) else: logger.info('windows测试环境不直接下载') logger.info('{}文件已完成下载'.format(file_name + '.' + file_url[1].split('.')[1])) return JsonResponse({'status': 200, 'msg': 'windows测试环境不直接下载'}) except Exception as e: print(e) logger.error('服务器下载行为出错,错误为:'.format(e)) return JsonResponse({'status': 500, 'msg': '内部服务器错误'}) return response