Django提供了一个基于class的FormView视图类,用于处理表单数据,其中包含了form_invalid_redirect()函数。
form_invalid_redirect()函数的作用是,当表单数据验证不通过时,跳转到一个指定的url,可以是一个绝对路径或相对路径。
使用方法:
- 继承Django的FormView类。
“`python
from django.views.generic.edit import FormView
class MyFormView(FormView):
form_class = MyForm
template_name = ‘my_template.html’
success_url = ‘/success/’
def form_valid(self, form):
# 表单验证通过后的逻辑处理
return super().form_valid(form)
def form_invalid(self, form):
# 表单验证失败后的逻辑处理
return super().form_invalid(form)
def form_invalid_redirect(self):
# 表单验证失败时跳转到指定的url
return ‘/fail/’
“`
- 在子类中覆盖form_invalid()函数,然后使用父类的form_invalid()函数来获取表单验证错误的响应。
python
class MyFormView(FormView):
form_class = MyForm
template_name = 'my_template.html'
success_url = '/success/'
def form_valid(self, form):
# 表单验证通过后的逻辑处理
return super().form_valid(form)
def form_invalid(self, form):
response = super().form_invalid(form)
return response
def form_invalid_redirect(self):
# 表单验证失败时跳转到指定的url
return '/fail/'
- 在子类中覆盖form_invalid_redirect()函数来指定表单验证失败后跳转的url。
python
class MyFormView(FormView):
form_class = MyForm
template_name = 'my_template.html'
success_url = '/success/'
def form_valid(self, form):
# 表单验证通过后的逻辑处理
return super().form_valid(form)
def form_invalid(self, form):
response = super().form_invalid(form)
return response
def form_invalid_redirect(self):
# 表单验证失败时跳转到指定的url
return '/fail/'
实例1:
假设我们有一个登录表单,用户填写用户名和密码,点击登录按钮后,我们需要先进行表单验证,如果验证通过,则判断用户名和密码是否与数据库保存的值匹配,如果匹配则跳转到主页,否则返回提示信息。
其中,在表单验证失败时,我们需要跳转到登录页面,这时就可以使用form_invalid_redirect()函数。
from django.views.generic.edit import FormView
class LoginView(FormView):
form_class = LoginForm
template_name = "login.html"
success_url = "/"
def form_valid(self, form):
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(username=username, password=password)
if user is not None and user.is_active:
login(self.request, user)
return super(LoginView, self).form_valid(form)
else:
form.add_error(None, "登录失败")
return super(LoginView, self).form_invalid(form)
def form_invalid_redirect(self):
return '/login/'
实例2:
假设我们有一个注册表单,用户填写相关信息后点击注册,如果表单验证不通过,则跳转到注册页面,如果验证通过,则将用户信息保存到数据库中,然后跳转到登录页面,这时就可以使用form_invalid_redirect()函数。
from django.views.generic.edit import FormView
class RegisterView(FormView):
form_class = RegisterForm
template_name = "register.html"
success_url = "/login/"
def form_valid(self, form):
user_form = form.save(commit=False)
user_form.password = make_password(form.cleaned_data["password"])
user_form.save()
return super(RegisterView, self).form_valid(form)
def form_invalid_redirect(self):
return '/register/'