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

  • Post category:Python

form_invalid_json()函数是Django框架中FormMixin类中的一个方法,主要用于在前端以JSON格式返回表单验证失败的信息。具体来说,当一个表单提交后,如果验证失败,那么form_invalid()函数会被调用,而FormMixin类中就默认实现了一个form_invalid_json()函数,用于将验证失败的信息以JSON格式返回到前端。

使用方法

在使用form_invalid_json()函数之前,需要先在views.py文件中引入JsonResponse类:

from django.http import JsonResponse

然后在继承FormMixin类的视图中,可以覆盖form_invalid()函数,并调用form_invalid_json()函数来返回JSON格式的验证失败信息。下面是一个示例代码:

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

class MyForm(Form):
    pass

class MyView(FormView):
    form_class = MyForm
    template_name = 'my_template.html'

    def form_invalid(self, form):
        response = super().form_invalid(form)
        return JsonResponse({'status': 'error',
                             'msg': '表单验证失败',
                             'errors': form.errors})

在上述示例中,当form_invalid()函数被调用时,使用JsonResponse类来构建一个JSON格式的响应,其中包括一个status状态码,一个msg信息以及一个errors字典,该字典包含了表单验证失败的具体错误信息,这些信息可以由form.errors属性来获取。

示例

下面提供两个示例:

示例一

假设我们有一个表单类MyForm,其中有三个字段:name,email和message。我们想要在表单验证失败时,以JSON格式返回验证失败的具体错误信息。代码如下:

from django import forms

class MyForm(forms.Form):
    name = forms.CharField(max_length=20, required=True)
    email = forms.EmailField(required=True)
    message = forms.CharField(max_length=100, required=True)

接着,在处理该表单的视图中,我们可以使用form_invalid_json()函数来返回JSON格式的验证失败信息。代码如下:

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

class MyView(FormView):
    form_class = MyForm
    template_name = 'my_template.html'

    def form_invalid(self, form):
        response = super().form_invalid(form)
        return JsonResponse({'status': 'error',
                             'msg': '表单验证失败',
                             'errors': form.errors})

当表单验证失败时,form.errors属性将返回一个字典,其中键值对的键是表单字段的名称,值是一个包含错误信息的列表。因此,在这个示例中,我们返回了一个包含错误信息的字典。

示例二

假设我们有一个表单类MyForm2,其中有两个字段:username和password。我们要求username必须包含至少两个字符,password必须包含至少八个字符。代码如下:

from django import forms

class MyForm2(forms.Form):
    username = forms.CharField(min_length=2, required=True)
    password = forms.CharField(min_length=8, required=True)

在处理该表单的视图中,我们可以使用form_invalid_json()函数来返回JSON格式的验证失败信息。代码如下:

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

class MyView2(FormView):
    form_class = MyForm2
    template_name = 'my_template2.html'

    def form_invalid(self, form):
        response = super().form_invalid(form)
        return JsonResponse({'status': 'error',
                             'msg': '表单验证失败',
                             'errors': form.errors})

当表单验证失败时,form.errors属性将返回一个字典,其中键值对的键是表单字段的名称,值是一个包含错误信息的列表。因此,在这个示例中,我们返回了一个包含错误信息的字典。例如,如果用户名只有一个字符,那么返回的JSON格式信息将包含如下内容:

{
    "status": "error",
    "msg": "表单验证失败",
    "errors": {
        "username": ["请填写至少2个字符。"],
        "password": ["请填写至少8个字符。"]
    }
}

以上示例提供了两种使用form_invalid_json()函数的方法。使用这个函数,我们可以很方便地在表单验证失败时以JSON格式返回错误信息。