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

  • Post category:Python

form_invalid_json()是一个Django Class-Based-View中的函数,用于返回一个表单验证不通过的Json数据对象。当表单提交出现错误时,该函数会将Json数据返回给前端,展示相应的错误信息。

该函数的使用方法如下:

首先,在你的视图类中需要继承django.views.generic.edit.FormView类。然后,在你的类视图中新增form_invalid_json()函数。

form_invalid_json()方法返回一个包含错误信息的Json对象,在这个对象的字典中,每个键代表了具体的错误,而每个值代表了错误信息。其中,错误的字段名为键,错误信息为值。例如:

from django.views.generic.edit import FormView
from django.http import JsonResponse
from .forms import MyForm

class MyFormView(FormView):
    form_class = MyForm
    template_name = 'form.html'

    def form_invalid_json(self, form):
        error_dict = {}
        for field in form.errors:
            error_dict[field] = form.errors[field]
        return JsonResponse(error_dict)

在这个例子中,如果表单出现了错误,form_invalid_json()函数会把表单的每个错误转化为一个键值对加入到一个字典(error_dict)列表中。然后,返回一个JsonResponse对象,该对象包含了字典中的全部数据。这些数据可以在前端用来呈现校验失败的错误信息。

接下来,还提供一些使用示例:

示例一

在提交表单时,如果一个字段未填写,则在前端页面上显示“该字段不能为空”的错误信息。代码如下:

from django.views.generic.edit import FormView
from django.http import JsonResponse
from .forms import MyForm

class MyFormView(FormView):
    form_class = MyForm
    template_name = 'form.html'

    def form_invalid_json(self, form):
        error_dict = {}
        for field in form.errors:
            error_dict[field] = form.errors[field]
        return JsonResponse(error_dict)

在第5行指定表单使用的表单类别。如果表单提交过程中,出现任何校验失败的错误,form_invalid_json()函数都会将这些错误信息以Json格式返回到前端页面。

示例二

如果表单中的某个字段填的字符长度超过15个,则在前端页面上展示“该字段的长度不能超过15个字符”的错误信息。代码如下:

from django.views.generic.edit import FormView
from django.http import JsonResponse
from .forms import MyForm

class MyFormView(FormView):
    form_class = MyForm
    template_name = 'form.html'

    def form_invalid_json(self, form):
        error_dict = {}
        for field in form.errors:
            error_dict[field] = form.errors[field]
        return JsonResponse(error_dict)

在这个例子中,如果表单提交时出现长度超过15个字符的错误,则调用form_invalid_json()函数并将该错误以Json格式返回到前端页面。这个错误可以是表单类别默认校验错误,也可以是通过给字段设置max_length属性来自定义的校验错误。