|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
django原来这页面没有验证码的,先跳转到 class ResetPasswordView ,现在想加了验证码后,先跳到resetpass 验证码验证后,再跳回 class ResetPasswordView 继续执行?
- from django.contrib.auth.views import PasswordResetView
- from django.contrib.messages.views import SuccessMessageMixin
- def resetpass(request):
- if request.method == 'POST':
- reset_form = ResetPasswordForm(request.POST)
- print("reset_form.is_valid",reset_form.is_valid())
- if reset_form.is_valid():
- capt = reset_form.cleaned_data.get("captcha") #用户提交的验证码
- Hashkey = reset_form.cleaned_data.get("hashkey")
- jc=jarge_captcha(request, capt, Hashkey)
- print("profile jarge_captcha",jc,capt,Hashkey)
- if jc==False:
- reset_form.add_error('captcha',ValidationError('验证码错误'))
-
- else:
- ResetPasswordView()
-
- else:
- print("reset_form is_valid")
- email = reset_form.cleaned_data.get('email')
- messages.success(request, f'{email} Your email is valid')
- else:
- reset_form = ResetPasswordForm(instance=request.email)
- return render(request, 'users/password_reset.html', {'reset_form': reset_form})
- class ResetPasswordView(SuccessMessageMixin, PasswordResetView):
- template_name = 'users/password_reset.html'
- email_template_name = 'users/password_reset_email.html'
- subject_template_name = 'users/password_reset_subject'
- success_message = "如果您输入的电子邮件存在一个帐户,我们会通过电子邮件向您发送设置密码的说明。 " \
- "您应该很快就会收到它们。 如果您没有收到电子邮件," \
- " 请确保您输入了您注册时使用的地址,并检查您的垃圾邮件文件夹。 "
- success_url = reverse_lazy('users-home')
复制代码
抱歉刚刚的回复与您的问题无关,现在回答您的问题:
要实现您的需求,关于在跳转到 ResetPasswordView 前验证验证码,您可以对 ResetPasswordView 进行重写,覆盖其 post 方法以实现先验证验证码,验证成功后再执行密码重置操作。具体修改如下:
首先,将 resetpass 函数内容移动至 class ResetPasswordView 内,并重命名为 check_captcha .
- class ResetPasswordView(SuccessMessageMixin, PasswordResetView):
- ...
- def check_captcha(self, request):
- reset_form = self.get_form()
- if reset_form.is_valid():
- capt = reset_form.cleaned_data.get("captcha") # 用户提交的验证码
- hash_key = reset_form.cleaned_data.get("hash_key")
- jc = jarge_captcha(request, capt, hash_key)
- if jc==False:
- reset_form.add_error('captcha', ValidationError('验证码错误'))
- return False
- else:
- return True
- else:
- return False
复制代码
接着,在 ResetPasswordView 中重写 post 方法,在调用 super() 执行原有密码重置逻辑前,先判断 check_captcha 的返回值。
- class ResetPasswordView(SuccessMessageMixin, PasswordResetView):
- ...
- def post(self, request, *args, **kwargs):
- is_captcha_valid = self.check_captcha(request)
- if is_captcha_valid:
- return super().post(request, *args, **kwargs)
- else:
- return self.render_to_response(self.get_context_data())
复制代码
这样,当用户提交表单时,会先执行 check_captcha 方法检查验证码是否正确,如果正确,再执行 ResetPasswordView 的原有逻辑。
|
|