详解Django的 form_invalid_json() 函数:返回表单验证失败后的 JSON 数据

  • Post category:Python

form_invalid_json()DjangoFormMixin 中的一个方法,它的作用是返回一个包含表单验证错误信息的 JSON 对象。

使用方法:

views.py 中,定义一个继承自 FormView 的视图,实现以下方法:

  1. form_invalid(self, form):表单验证不通过时的处理逻辑,该方法默认返回一个包含表单验证错误的页面。我们需要在这个方法中调用 self.form_invalid_json(form) 来返回一个包含错误信息的 JSON 对象。

  2. form_invalid_json(self, form):生成 JSON 对象的方法,它的参数是表单对象 form,返回一个包含表单错误信息的 JSON 对象。

下面提供两个示例:

  1. 前后端分离的情况下,常常需要通过 AJAX 提交表单,这时候如果表单验证不通过,我们需要返回一个包含错误信息的 JSON 对象,以便前端进行错误提示。
# views.py
from django.views.generic import FormView
from django.urls import reverse_lazy
from django.http import JsonResponse
from .forms import MyForm

class MyFormView(FormView):
    form_class = MyForm
    template_name = 'my_template.html'
    success_url = reverse_lazy('success_url')

    def form_invalid(self, form):
        return JsonResponse(self.form_invalid_json(form))

    def form_invalid_json(self, form):
        errors = {}
        for field in form.errors:
            errors[field] = form.errors[field][0]
        return {'success': False, 'errors': errors}

在这个例子中,form_invalid_json() 方法将表单验证错误信息转换为一个 JSON 对象,然后由 form_invalid() 方法返回该对象。

  1. 在统一管理表单错误信息的情况下,我们也可以直接继承 forms.Form,重写 form_invalid() 方法和 form_invalid_json() 方法,从而实现自定义的表单错误信息管理逻辑。
# forms.py
from django import forms

class MyForm(forms.Form):
    username = forms.CharField(max_length=20)
    password = forms.CharField(max_length=20)

    def form_invalid(self, message):
        self.add_error(None, message)

    def form_invalid_json(self):
        errors = {}
        for field in self.errors:
            errors[field] = self.errors[field][0]
        return {'success': False, 'errors': errors}

在这个例子中,form_invalid() 方法中,我们可以通过传入错误信息 message,将错误信息添加到表单对象中,然后在 form_invalid_json() 方法中,将表单验证错误信息转换为一个 JSON 对象。

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