|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- class CustomLoginView(LoginView):
- form_class = LoginForm
- def form_valid(self,form):
- remember_me = form.cleaned_data.get('remember_me')
- username = form.cleaned_data.get('username')
- capt=form.cleaned_data.get("captcha")
- key=form.cleaned_data.get("hashkey")
- jc=jarge_captcha(capt,key)
- print("form_valid",jc)
- if not remember_me:
- self.request.session.set_expiry(0)
- self.request.session.modified = True
-
- if jarge_captcha(capt,key)==True:
- print("form_valid True",jc)
- return super(CustomLoginView, self).form_valid(form)
-
- else:
- print("form_valid ValidationError",jc)
- #form.add_error('captcha',ValidationError('验证码错误'))
- return HttpResponse(f'{username} 验证码错误')
复制代码
怎么让验证码错误提示在form上呢? 现在用HttpResponse 是打开了另一窗口提示的。。。
要将验证码错误提示显示在表单上,您可以将错误添加到表单实例中,然后重新呈现表单。您可以通过以下方法实现这一目标:
在form_valid方法中,如果验证码错误,请将错误添加到表单的captcha字段。
返回form_invalid方法以重新呈现表单,并显示错误信息。
这是修改后的代码:
- from django.contrib import messages
- class CustomLoginView(LoginView):
- form_class = LoginForm
- def form_valid(self, form):
- remember_me = form.cleaned_data.get('remember_me')
- username = form.cleaned_data.get('username')
- capt = form.cleaned_data.get("captcha")
- key = form.cleaned_data.get("hashkey")
- jc = jarge_captcha(capt, key)
- print("form_valid", jc)
-
- if not remember_me:
- self.request.session.set_expiry(0)
- self.request.session.modified = True
- if jarge_captcha(capt, key) == True:
- print("form_valid True", jc)
- return super(CustomLoginView, self).form_valid(form)
- else:
- print("form_valid ValidationError", jc)
- form.add_error('captcha', '验证码错误')
- return self.form_invalid(form)
复制代码
现在,当验证码错误时,错误信息将显示在表单的captcha字段旁边。请注意,如果您的模板中已经有用于显示字段错误的代码,这种方法才会生效。例如,您的模板应该包含类似以下代码的部分:
- {% for field in form %}
- <div class="form-group">
- <label for="{{ field.id_for_label }}">{{ field.label }}</label>
- {{ field }}
- {% if field.errors %}
- <div class="text-danger">
- {% for error in field.errors %}
- {{ error }}
- {% endfor %}
- </div>
- {% endif %}
- </div>
- {% endfor %}
复制代码
这段代码会迭代表单中的所有字段,并在每个字段后面显示其错误信息。
|
|