def user_changeemail(request): user_changeeamil_form = UserChangeEmailForm(request.POST) if user_changeeamil_form.is_valid(): email = user_changeeamil_form.cleaned_data['email'] user_list = UserProfile.objects.filter( Q(email=email) | Q(username=email)) if user_list: return JsonResponse({'status': 'fail', 'msg': '邮箱已经被绑定'}) else: email_ver_list = EmailVerifyCode.objects.filter(email=email, send_type=3) if email_ver_list: email_ver = email_ver_list.order_by('-add_time')[0] # 判断当前时间和最近添加验证码的时间之差 if (datetime.now() - email_ver.add_time).seconds > 60: email_ver.delete() send_email_code(email, 3) return JsonResponse({'status': 'ok', 'msg': '验证码已发送至邮箱'}) else: return JsonResponse({ 'status': 'fail', 'msg': '请去邮箱查看验证码或请一分钟后重新发送' }) else: send_email_code(email, 3) return JsonResponse({'status': 'ok', 'msg': '验证码已发送至邮箱'}) else: return JsonResponse({'status': 'fail', 'msg': '您的邮箱存在异常'})
def user_changeemail(request): user_changeemail_form = UserChangeEmailForm(request.POST) if user_changeemail_form.is_valid(): # 验证输入的新邮箱数据 email = user_changeemail_form.cleaned_data['email'] # 获取新邮箱 email_list = UserProfile.objects.filter( Q(email=email) | Q(username=email)) # 查询新的邮箱是否在数据库表中 if email_list: # 说明这个新邮箱已在数据库中,则无法使用 return JsonResponse({'status': 'fail', 'msg': '此邮箱已被绑定'}) else: # 说明这个新邮箱不在数据库中,可以使用 # 在发送邮件验证码之前,应该去邮箱验证码表中查找,看看之前有没有往当前这个新邮箱发送过修改邮箱这个类型的验证码 email_ver_list = EmailVerifyCode.objects.filter(email=email, send_type=3) if email_ver_list: # 说明发送过验证码,那么需要获取到新近发送这个一个验证码时间 email_ver = email_ver_list.order_by('-add_time')[0] # 判断当前时间与最近发送的验证码添加时间之差 if (datetime.now() - email_ver.add_time ).seconds > 60: # 表示距离上次发送验证码时间大于60秒,可以再次发送 send_mail_code(email, 3) # 如果我们重新发送了新的验证码,那么以前最近发的就可以清楚掉 email_ver.delete() return JsonResponse({ 'status': 'ok', 'msg': '请去你的新邮箱中获取验证码' }) else: # 小于60秒,不需要再次发送验证码 return JsonResponse({ 'status': 'fail', 'msg': '请不要重发发送验证码,60秒后再试' }) else: # 未发送过验证码 send_mail_code(email, 3) return JsonResponse({'status': 'ok', 'msg': '请去你的新邮箱中获取验证码'}) else: # 输入的邮箱信息未通过验证 return JsonResponse({'status': 'fail', 'msg': '输入邮箱信息错误'})
def dispatch(self, request, *args, **kwargs): action = request.POST.get('action') self.profile_settings_form = ProfileSettingsForm( (request.POST if action == 'profile' else None), (request.FILES if action == 'profile' else None), prefix='profile', instance=request.user ) self.user_change_password = UserChangePasswordForm(request.user, (request.POST if action == 'password' else None), prefix='password') self.user_change_email = UserChangeEmailForm(request.user, (request.POST if action == 'email' else None), prefix='email') return super(UserSettings, self).dispatch(request, *args, **kwargs)
class UserSettings(TemplateView): template_name = 'users/settings.html' @method_decorator(login_required) def dispatch(self, request, *args, **kwargs): action = request.POST.get('action') self.profile_settings_form = ProfileSettingsForm( (request.POST if action == 'profile' else None), (request.FILES if action == 'profile' else None), prefix='profile', instance=request.user ) self.user_change_password = UserChangePasswordForm(request.user, (request.POST if action == 'password' else None), prefix='password') self.user_change_email = UserChangeEmailForm(request.user, (request.POST if action == 'email' else None), prefix='email') return super(UserSettings, self).dispatch(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super(UserSettings, self).get_context_data(**kwargs) context['profile_settings_form'] = self.profile_settings_form context['user_change_password'] = self.user_change_password context['user_change_email'] = self.user_change_email return context def post(self, request, *args, **kwargs): if self.profile_settings_form.is_valid(): self.profile_settings_form.save() messages.success(request, _(u'Дані успішно змінені та збережені')) return redirect(request.path) elif self.user_change_password.is_valid(): self.user_change_password.save() request.user.backend = request.session[BACKEND_SESSION_KEY] login(request, request.user) messages.success(request, _(u'Пароль успішно змінений')) return redirect(request.path) elif self.user_change_email.is_valid(): self.user_change_email.save() messages.success(request, _(u'Email успішно змінений та збережений')) return redirect(request.path) return self.get(request, *args, **kwargs)