form_valid()
函数是 Django 中的视图函数,用于当一个表单请求通过全部验证时执行指定的操作。可以在表单中编写验证表单数据的代码,也可以在函数中编写关于表单数据的处理和存储代码。它通常和 Django 中的 Form 类结合使用,可以有效地简化表单处理和验证。
使用 form_valid()
函数,需要继承 Django 中的 FormView
类或其子类,然后覆写 form_valid()
函数。当验证表单数据通过,就会执行当前视图中重写的 form_valid()
函数。
以下是使用 form_valid()
函数的两个实例:
示例一:
from django.views.generic.edit import CreateView
from django.urls import reverse_lazy
from .forms import UserForm
from .models import User
class UserCreateView(CreateView):
model = User
form_class = UserForm
template_name = 'register.html'
success_url = reverse_lazy('login')
def form_valid(self, form):
form.instance.set_password(form.cleaned_data['password'])
return super().form_valid(form)
在上述代码中,我们可以看到,UserCreateView
继承了 Django 中的 CreateView
类,使用 UserForm
作为表单验证类,处理用户注册数据:
- 在提交表单时,先将表单中的密码字段通过
set_password()
方法进行加密处理。 - 调用父类的
form_valid()
函数,将加密处理后用户数据存储到数据库中。
示例二:
class UserLoginView(FormView):
template_name = 'login.html'
form_class = AuthenticationForm
def form_valid(self, form):
login(self.request, form.user_cache)
return super().form_valid(form)
def get_success_url(self):
redirect_to = self.request.GET.get('next', '/')
return redirect_to
在上述代码中,我们使用 AuthenticationForm
进行登录表单验证:
- 当用户填写完毕表单后,我们可以通过父类的
form_valid()
函数获取用户登录数据的form.user_cache
对象。 - 然后,我们调用 Django 中的
login()
方法进行用户登录。
注意:在实际开发中需要引入 UserCreationForm
(用户注册表单)或 AuthenticationForm
(用户登录表单),这两个表单类分别继承了 Django 中的 UserCreationForm
和 AuthenticationForm
类,使用和继承他们可以大大简化开发的过程。
以上就是 form_valid()
函数的作用和使用方法的完整攻略。