下面就 Dajngo 的 form_invalid()
函数进行详细讲解。
form_invalid()
函数作用
form_invalid()
是 Django 中 FormMixin
类提供的一个方法,用于提交表单时数据不合法情况下的处理。当表单提交后,如果数据不合法,在 form_invalid()
中我们可以对数据进行重新处理或提示用户输入错误。通常情况下,form_invalid()
注重处理提交数据的错误提示,以便节约时间并让用户准确处理输入的错误数据。
使用方法
Django 中的 form_invalid()
函数大多在视图函数上被声明,通常下面是该方法的具体实现。
from django.views.generic.edit import FormMixin
class MyView(FormMixin, View):
form_class = MyForm
success_url = '/success/'
template_name = 'my_view_template.html'
def get(self, request, *args, **kwargs):
form = self.form_class()
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
# 当表单通过验证时执行的操作,由开发者自行实现
return redirect(self.success_url)
def form_invalid(self, form):
# 处理表单提交不通过的情况,通常返回原页面
return self.render_to_response({'form': form})
实例
现在我来提供两个实例:
实例 1
对于一个创建博客文章的系统,我们需要一个表单来收集文章的基本信息,如标题、作者、类型、内容等,以便显示在前端页面上。当用户提交一个表单并包含不合法的输入时,需要向用户显示输入错误的反馈信息。
在这个场景下,form_invalid()
方法的作用是返回响应,告诉用户输入的错误。
class BlogCreateView(CreateView):
model = Blog
fields = ['title', 'author', 'type', 'content']
def form_invalid(self, form):
messages.error(self.request, '请确保所有信息都已正确填写!')
return super().form_invalid(form)
实例 2
在注册系统中,我们需要检查提交的表单是否包含一个已经存在的用户,以便标记输入非法的操作。当表单不存在任何输入错误时,用户被重定向到主页。
下面是实例中 form_invalid()
函数的代码:
from django.contrib import messages
from django.shortcuts import render, redirect
from django.views import View
from users.forms import UserRegisterForm
from django.contrib.auth.models import User
class RegisterView(View):
form_class = UserRegisterForm
template_name = 'users/register.html'
def get(self, request):
form = self.form_class()
return render(request, self.template_name, {'form': form})
def post(self, request):
form = self.form_class(request.POST)
if form.is_valid():
user = form.save(commit=False)
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user.set_password(password)
user.save()
messages.success(request, f'您的账号 {username} 已注册成功!')
return redirect('blog-home')
else:
if User.objects.filter(username=form.cleaned_data['username']).exists():
messages.error(request, '该用户名已被注册!')
return self.form_invalid(form)
def form_invalid(self, form):
messages.error(self.request, '请输入正确的信息')
return self.render_to_response({'form': form})
以上两个实例为 form_invalid()
函数的使用提供了一些思路。您现在可以在自己的项目中使用这个函数,对 in-valid 数据进行处理,并给出相应的错误提示信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Django的 form_invalid() 函数:当表单验证失败时执行的操作 - Python技术站