详解Django的 form_validated() 函数:表单数据验证通过后的处理逻辑

  • Post category:Python

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 中的 UserCreationFormAuthenticationForm 类,使用和继承他们可以大大简化开发的过程。

以上就是 form_valid() 函数的作用和使用方法的完整攻略。