def clean_phone(self): ''' 判断简历重复需要从上传简历和简历库判断 新录入简历判断重复,直接从pinbot简历库ContactInfoData里判断是否存在, 即没有录入简历UploadResume并且ContactInfoData不存在才能通过 编辑简历判断重复,如果用户编辑的简历联系信息是自己上传的简历UploadResume即可以录入 如果用户编辑的简历联系信息不存在,并且不在聘宝简历库中,与新简历信息录入判断逻辑一 致 ''' phone = self.cleaned_data['phone'] if error_phone(phone): raise forms.ValidationError('电话号码有误,请填写正确格式的电话号码') has_phone_resume = UploadResume.objects.filter( phone=phone ).values_list('id', flat=True) has_contact_phone = ContactInfoData.objects.filter( phone=phone ).exists() if not has_phone_resume and not has_contact_phone: return phone if self.resume and self.resume.id in has_phone_resume: return phone raise forms.ValidationError('电话已经存在,请重新填写')
def clean_phone(self): ''' 判断简历重复需要从上传简历和简历库判断 新录入简历判断重复,直接从pinbot简历库ContactInfoData里判断是否存在, 即没有录入简历UploadResume并且ContactInfoData不存在才能通过 编辑简历判断重复,如果用户编辑的简历联系信息是自己上传的简历UploadResume即可以录入 如果用户编辑的简历联系信息不存在,并且不在聘宝简历库中,与新简历信息录入判断逻辑一 致 ''' phone = self.cleaned_data['phone'] if error_phone(phone): raise forms.ValidationError('电话号码有误,请填写正确格式的电话号码') has_phone_resume = UploadResume.objects.filter( phone=phone).values_list('id', flat=True) has_contact_phone = ContactInfoData.objects.filter( phone=phone).exists() if not has_phone_resume and not has_contact_phone: return phone if self.resume and self.resume.id in has_phone_resume: return phone raise forms.ValidationError('电话已经存在,请重新填写')
def clean_phone(self): phone = self.data['phone'] if error_phone(phone): raise forms.ValidationError( u'电话号码格式错误,请填写正确的手机号' ) return phone
def clean_phone(self): phone = self.data['phone'] if error_phone(phone): raise forms.ValidationError( u'电话号码格式错误,请填写正确的手机号或者座机号,<br />如:18042412009,07735422199,40000001111' ) return phone
def clean_phone(self): phone = self.cleaned_data['phone'] if error_phone(phone): raise forms.ValidationError('电话号码有误,请填写正确格式的电话号码') if PinbotAccount.is_phone_bind(mobile=phone): raise forms.ValidationError('该手机号%s已被注册,请使用其他手机号注册!' % (phone)) return phone
def post(self, request): post_data = request.JSON mobile = post_data.get('mobile') code = post_data.get('code') password = post_data.get('password') re_password = post_data.get('re_password') if not error_phone(mobile) and not PinbotAccount.is_phone_bind( mobile=mobile): return JsonResponse({ 'status': 'error', 'msg': '手机号未绑定,不能登录', 'errors': { "phone": ['手机号未绑定,不能登录'] } }) if password != re_password: return JsonResponse({ 'status': 'error', 'msg': '前后密码不一致', 'errors': { "password": ['前后密码不一致'] } }) if not SmsCode.vaild_sms_code( mobile=mobile, code=code, action_name='ChangePwd'): return JsonResponse({ 'status': 'error', 'msg': '短信验证码错误', 'errors': { "code": ['短信验证码错误'] } }) user_profile = PinbotAccount.get_profile(phone=mobile, is_phone_bind=True) if not user_profile: return JsonResponse({ 'status': 'error', 'msg': '账号错误', 'errors': { "phone": ['账号错误'] } }) if not PinbotAccount.change_user_pwd(user_id=user_profile.user.id, password=password): return JsonResponse({ 'status': 'error', 'msg': '修改密码错误,请重试或者联系管理员!' }) return JsonResponse({'status': 'ok', 'msg': '修改密码成功!'})
def post(self, request): post_data = request.JSON mobile = post_data.get('mobile') code = post_data.get('code') password = post_data.get('password') re_password = post_data.get('re_password') if not error_phone(mobile) and not PinbotAccount.is_phone_bind(mobile=mobile): return JsonResponse( { 'status': 'error', 'msg': '手机号未绑定,不能登录', 'errors': { "phone": [ '手机号未绑定,不能登录' ] } } ) if password != re_password: return JsonResponse( { 'status': 'error', 'msg': '前后密码不一致', 'errors': { "password": [ '前后密码不一致' ] } } ) if not SmsCode.vaild_sms_code( mobile=mobile, code=code, action_name='ChangePwd' ): return JsonResponse( { 'status': 'error', 'msg': '短信验证码错误', 'errors': { "code": [ '短信验证码错误' ] } } ) user_profile = PinbotAccount.get_profile(phone=mobile, is_phone_bind=True) if not user_profile: return JsonResponse( { 'status': 'error', 'msg': '账号错误', 'errors': { "phone": [ '账号错误' ] } } ) if not PinbotAccount.change_user_pwd( user_id=user_profile.user.id, password=password ): return JsonResponse( { 'status': 'error', 'msg': '修改密码错误,请重试或者联系管理员!' } ) return JsonResponse( { 'status': 'ok', 'msg': '修改密码成功!' } )
def post(self, request): if self.malice_ip(): return JsonResponse( { 'status': 'error', 'msg': '错误次数太多,请稍后再试', 'errors': { "username": [ '错误次数太多,请稍后再试' ] } } ) post_data = request.JSON username = post_data.get('username') password = post_data.get('password') next_url = post_data.get('next', reverse('special-feed-page')) if not error_phone(username) and not PinbotAccount.is_phone_bind(mobile=username): return JsonResponse( { 'status': 'error', 'msg': '手机号未绑定,不能登录', 'errors': { "username": [ '手机号未绑定,不能登录' ] } } ) user = authenticate( username=username, password=password ) if not user: return JsonResponse( { 'status': 'error', 'msg': '登陆失败,用户名或密码错误', 'errors': { "username": [ '登陆失败,用户名或密码错误' ] } } ) if not hasattr(user, 'userprofile'): return JsonResponse({ 'status': 'error', 'msg': '请使用新的企业邮箱重新注册聘宝企业端', 'errors': { "username": [ '请使用新的企业邮箱重新注册聘宝企业端', ] } }) redirect_url = get_valid_next_url(next_url) login(request, user) self.clean_malice() industrys = user.company_set.all().values_list('category__industry__code_name', flat=True) user_industry = industrys[0] if len(industrys) > 0 else '' if user_industry == 'medicine': redirect_url = reverse('new_field_attent') return JsonResponse( { 'status': 'ok', 'msg': '登陆成功', 'username': user.username, 'redirect_url': redirect_url, 'user_industry': user_industry } )
def send_interview_alarm(): sms_notify_meta = u'【聘宝招聘】面试提醒:您安排了%(time)s,%(name)s的%(position_title)s职位面试,建议您再次与候选人确认面试信息,详细链接:%(url)s。祝面试顺利!' html_notify_meta = u'面试提醒:您安排了%(time)s,%(name)s的%(position_title)s职位面试,建议您再次与候选人确认面试信息。!' now = datetime.datetime.now() notify_end_time = now + datetime.timedelta(hours=2) alarms = InterviewAlarm.objects.select_related( 'buy_record', 'buy_record__user', 'buy_record__user__userprofile', ).filter( has_alarm=False, interview_time__gte=now, interview_time__lte=notify_end_time, ) resume_id_list = [alarm.buy_record.resume_id for alarm in alarms if alarm.buy_record.resume_id] resume_data_mapper = get_resume_mapper(resume_id_list) contactinfo_mapper = get_contactinfo_mapper(resume_id_list) for alarm in alarms: user = alarm.buy_record.user if not hasattr(user, 'userprofile'): continue resume_id = alarm.buy_record.resume_id interview_time = alarm.interview_time.strftime('%Y-%m-%d %H:%M') name = contactinfo_mapper.get(resume_id, '') position_title = resume_data_mapper.get(resume_id, '') userprofile = user.userprofile phone = userprofile.phone if not error_phone(phone): resume_url = 'http://www.pinbot.me/resumes/display/%s' % resume_id sms_notify = sms_notify_meta % { 'time': interview_time, 'name': name, 'position_title': position_title, 'url': resume_url, } asyn_send_sms(phone, sms_notify) html_notify = html_notify_meta % { 'time': interview_time, 'name': name, 'position_title': position_title, } html_url = '/resumes/display/%s' % resume_id notify.send( user, recipient=user, verb='%s(<a class="c0091fa" href="%s">查看详情</a>)' % (html_notify, html_url), user_role='hr', notify_type='interview_alarm_notify', ) alarm.has_alarm = True alarm.save() return True
def clean_phone(self): phone = self.cleaned_data['phone'] if error_phone(phone): raise forms.ValidationError('电话号码有误,请填写正确格式的电话号码') return phone
def post(self, request): if self.malice_ip(): return JsonResponse({ 'status': 'error', 'msg': '错误次数太多,请稍后再试', 'errors': { "username": ['错误次数太多,请稍后再试'] } }) post_data = request.JSON username = post_data.get('username') password = post_data.get('password') next_url = post_data.get('next', reverse('special-feed-page')) if not error_phone(username) and not PinbotAccount.is_phone_bind( mobile=username): return JsonResponse({ 'status': 'error', 'msg': '手机号未绑定,不能登录', 'errors': { "username": ['手机号未绑定,不能登录'] } }) user = authenticate(username=username, password=password) if not user: return JsonResponse({ 'status': 'error', 'msg': '登陆失败,用户名或密码错误', 'errors': { "username": ['登陆失败,用户名或密码错误'] } }) if not hasattr(user, 'userprofile'): return JsonResponse({ 'status': 'error', 'msg': '请使用新的企业邮箱重新注册聘宝企业端', 'errors': { "username": [ '请使用新的企业邮箱重新注册聘宝企业端', ] } }) redirect_url = get_valid_next_url(next_url) login(request, user) self.clean_malice() industrys = user.company_set.all().values_list( 'category__industry__code_name', flat=True) user_industry = industrys[0] if len(industrys) > 0 else '' if user_industry == 'medicine': redirect_url = reverse('new_field_attent') return JsonResponse({ 'status': 'ok', 'msg': '登陆成功', 'username': user.username, 'redirect_url': redirect_url, 'user_industry': user_industry })
def clean_phone(self): phone = self.cleaned_data["phone"] if error_phone(phone): raise forms.ValidationError("电话号码有误,请填写正确格式的电话号码") return phone
def send_interview_alarm(): sms_notify_meta = u'【聘宝招聘】面试提醒:您安排了%(time)s,%(name)s的%(position_title)s职位面试,建议您再次与候选人确认面试信息,详细链接:%(url)s。祝面试顺利!' html_notify_meta = u'面试提醒:您安排了%(time)s,%(name)s的%(position_title)s职位面试,建议您再次与候选人确认面试信息。!' now = datetime.datetime.now() notify_end_time = now + datetime.timedelta(hours=2) alarms = InterviewAlarm.objects.select_related( 'buy_record', 'buy_record__user', 'buy_record__user__userprofile', ).filter( has_alarm=False, interview_time__gte=now, interview_time__lte=notify_end_time, ) resume_id_list = [ alarm.buy_record.resume_id for alarm in alarms if alarm.buy_record.resume_id ] resume_data_mapper = get_resume_mapper(resume_id_list) contactinfo_mapper = get_contactinfo_mapper(resume_id_list) for alarm in alarms: user = alarm.buy_record.user if not hasattr(user, 'userprofile'): continue resume_id = alarm.buy_record.resume_id interview_time = alarm.interview_time.strftime('%Y-%m-%d %H:%M') name = contactinfo_mapper.get(resume_id, '') position_title = resume_data_mapper.get(resume_id, '') userprofile = user.userprofile phone = userprofile.phone if not error_phone(phone): resume_url = 'http://www.pinbot.me/resumes/display/%s' % resume_id sms_notify = sms_notify_meta % { 'time': interview_time, 'name': name, 'position_title': position_title, 'url': resume_url, } asyn_send_sms(phone, sms_notify) html_notify = html_notify_meta % { 'time': interview_time, 'name': name, 'position_title': position_title, } html_url = '/resumes/display/%s' % resume_id notify.send( user, recipient=user, verb='%s(<a class="c0091fa" href="%s">查看详情</a>)' % (html_notify, html_url), user_role='hr', notify_type='interview_alarm_notify', ) alarm.has_alarm = True alarm.save() return True
def clean_phone(self): phone = self.data['phone'] if error_phone(phone): raise forms.ValidationError(u'电话号码格式错误,请填写正确的手机号') return phone