def user_register(request): if request.method == 'GET': user_register_form = UserRegisterForm() # 是为了使用验证码 # print(user_register_form.captcha ) return render(request, 'register.html', {'user_register_form': user_register_form}) else: user_register_form = UserRegisterForm(request.POST) if user_register_form.is_valid(): email = user_register_form.cleaned_data['email'] password = user_register_form.cleaned_data['password'] # 先查找用户表中是否有这个用户 user_list = UserProfile.objects.filter( Q(username=email) | Q(email=email)) if user_list: return render(request, 'register.html', {'msg': '用户已经存在'}) else: a = UserProfile() a.username = email a.set_password(password) a.email = email a.save() send_email_code(email, 1) return HttpResponse('请尽快前往您的邮箱激活,否则无法登陆') # return redirect(reverse('index')) else: return render(request, 'register.html', {'user_register_form': user_register_form})
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_register(request): '''这是用户注册的视图''' if request.method == 'GET': #这里把表单类的实例返回去是为了用验证码 user_register_from = UserRegisterForm() return render(request, 'users/register.html', {'user_register_form': user_register_from}) else: user_register_form = UserRegisterForm(request.POST) if user_register_form.is_valid(): email = user_register_form.cleaned_data['email'] password = user_register_form.cleaned_data['password'] #Q对象用于处理或关系的查询 user_list = UserProfile.objects.filter( Q(username=email) | Q(email=email)) if user_list: return render(request, 'register.html', {'msg': '用户已经存在'}) else: new_user = UserProfile() new_user.username = email new_user.set_password(password) new_user.email = email new_user.save() #向用户的邮箱发送验证码,用于激活用户 send_email_code(email, 1) return HttpResponse('请尽快前往您的邮箱激活,否则无法登录') #return redirect(reverse('index')) #下面是验证不通过的情况 else: return render(request, 'register.html', {'user_register_form': user_register_form})
def post(self, request): user_register_form = UserRegisterForm(request.POST) if user_register_form.is_valid(): email = user_register_form.cleaned_data['email'] password = user_register_form.cleaned_data['password'] user_list = UserProfile.objects.filter( Q(username=email) | Q(email=email)) if user_list: return render(request, 'users/register.html', {'msg': '用户已经存在'}) else: a = UserProfile() a.username = email a.set_password(password) a.email = email # 进行邮箱验证激活 # 发送邮箱验证码 if send_email_code(email, 1): a.save() return HttpResponse('情尽快前往邮箱激活账号') else: return HttpResponse('注册失败') # return redirect('/users/user_login') else: return render(request, 'users/register.html', {'user_register_form': user_register_form})
def user_changeemail(request): ''' 这是用户修改邮箱的视图。当用户修改邮箱点击获取验证码的时候,会通过这个视图处理,发送邮箱验证码。 :param request:http请求对象 :return 返回json数据,在模板页面中处理 ''' user_changeemail_form = UserChangeemailForm(request.POST) if user_changeemail_form.is_valid(): email = user_changeemail_form.cleaned_data['email'] #看看这个邮箱是否已经被占用 user_list = UserProfile.objects.filter( Q(email=email) | Q(username=email)) if user_list: return JsonResponse({'status': 'fail', 'msg': '邮箱已经被绑定'}) else: #查看验证码表中是否已经给这个邮箱发送过send_type为3的邮件 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: send_email_code(email, 3) #因为已经发了新的,所以旧的就可以删除了 email_ver.delete() return JsonResponse({ 'status': 'ok', 'msg': '请尽快去邮箱中获取验证码' }) else: return JsonResponse({ 'status': 'fail', 'msg': '请不要重复发送验证码,1分钟后重试' }) #如果从来没有发送过这种验证码,就直接发送 else: send_email_code(email, 3) return JsonResponse({'status': 'ok', 'msg': '请尽快去邮箱中获取验证码'}) else: return JsonResponse({'status': 'fail', 'msg': '您的邮箱有误,请查证。'})
def get(self, request): email_form = UserChangeEmailForm(request.GET) if email_form.is_valid(): email = email_form.cleaned_data['email'] users = UserProfile.objects.filter( Q(email=email) | Q(username=email)) if users: return JsonResponse({'msg': '该邮箱已存在'}) print(f'{email=}') # 查询该邮箱最近是否获取过验证码 email_verf_list = EmailVerifyCode.objects.filter(email=email, send_type=3) if email_verf_list: email_verf = email_verf_list.order_by('-add_time')[0] if (datetime.now() - email_verf.add_time).seconds < 60: return JsonResponse({'msg': '发送频率过高'}) # 删除之前的验证码, 重新获取验证码 email_verf.delete() send_email_code(email, 3) return JsonResponse({'msg': 'success'}) return JsonResponse({'msg': 'fail'})
def user_forget(request): '''这是用户忘记密码的视图''' if request.method == 'GET': #把这个空表单传过去是为了传验证码 user_forget_form = UserForgetForm() return render(request, 'forgetpwd.html', {'user_forget_form': user_forget_form}) else: user_forget_form = UserForgetForm(request.POST) if user_forget_form.is_valid(): email = user_forget_form.cleaned_data['email'] user_list = UserProfile.objects.filter(username=email) #如果用户的邮箱存在 if user_list: send_email_code(email, 2) return HttpResponse('请尽快去您的邮箱重置密码') else: return render(request, 'users/forgetpwd.html', {'msg': '用户不存在'}) else: return render(request, 'users/forgetpwd.html', {'user_forget_form': user_forget_form})
def post(self, request): user_forget_form = UserForgetForm(request.POST) if user_forget_form.is_valid(): email = user_forget_form.cleaned_data['email'] user_list = UserProfile.objects.filter(email=email) if user_list: if send_email_code(email, 2): return HttpResponse('情尽快去邮箱重置密码') else: msg = '验证失败' return render(request, 'users/forgetpwd.html', locals()) else: msg = '用户不存在' return render(request, 'users/forgetpwd.html', locals()) else: return render(request, 'users/forgetpwd.html', locals())