详解Django的 form_valid_json() 函数:返回表单验证成功后的 JSON 数据

  • Post category:Python

form_valid_json()函数是Django框架提供的一个表单验证函数,用于在表单提交时验证表单数据,处理表单数据并返回JSON格式的数据。它通常被用于Ajax表单提交中。下面是form_valid_json()函数的具体作用和使用方法的攻略。

作用

form_valid_json()函数的主要作用包括:

  1. 验证表单数据:在表单提交时,该函数会自动进行表单数据的验证。

  2. 处理表单数据:当表单数据验证成功后,该函数会自动处理表单数据。

  3. 返回JSON格式数据:最后,该函数会将处理后的数据以JSON格式返回,在前端完美呈现Ajax表单提交的数据。

使用方法

现在,我们来详细介绍form_valid_json()函数的使用方法:

  1. 定义View类

在views.py中定义View类,该类继承自Django框架的FormView类,并重写form_valid()方法。

from django.views.generic.edit import FormView
from django.urls import reverse_lazy
from .forms import ContactForm
from django.http import JsonResponse

class ContactFormView(FormView):
    form_class = ContactForm
    template_name = 'contact.html'
    success_url = reverse_lazy('success')  # 成功提交表单后重定向的页面

    def form_valid(self, form):
        data = form.cleaned_data
        # 将data处理成字典类型,然后以JSON格式返回
        return JsonResponse({'success': True, 'data': data})
  1. 自定义form_valid_json()函数
class ContactFormView(FormView):
    form_class = ContactForm
    template_name = 'contact.html'
    success_url = reverse_lazy('success')

    def form_valid(self, form):
        data = form.cleaned_data # 获取表单数据

        # 处理表单数据并构造JSON格式数据
        return self.form_valid_json(form, {'success': True, 'data': data})

    def form_valid_json(self, form, data):
        """
        处理表单数据并返回JSON格式数据
        """
        return JsonResponse(data)
  1. 在HTML中添加JS代码

在HTML文件中通过Ajax提交表单,并接收后端返回的JSON格式数据。

$(document).on('submit', '#contact-form', function (event) {
    event.preventDefault(); // 防止表单默认提交
    var formData = $(this).serialize();
    var url = $(this).attr('action');

    $.ajax({
        type: "post",
        url: url,
        data: formData,
        dataType: "json",
        success: function (data) {
            if (data['success']) {
                alert("提交成功!");
            } else {
                alert("提交失败!");
            }
        }
    });

    return false;
});

示例

下面提供两个实际应用的例子:

示例1. Ajax提交注册表单

class RegisterFormView(FormView):
    form_class = RegisterForm
    template_name = 'register.html'
    success_url = reverse_lazy('success')

    def form_valid(self, form):
        data = form.cleaned_data # 获取表单数据

        # 将data保存到数据库中
        user = User(username=data.get('username'), email=data.get('email'), password=data.get('password'))
        user.save()

        # 处理表单数据并构造JSON格式数据
        return self.form_valid_json(form, {'success': True, 'message': '注册成功!'})
$(document).on('submit', '#register-form', function (event) {
    event.preventDefault(); // 防止表单默认提交
    var formData = $(this).serialize();
    var url = $(this).attr('action');

    $.ajax({
        type: "post",
        url: url,
        data: formData,
        dataType: "json",
        success: function (data) {
            if (data['success']) {
                alert(data['message']);
            } else {
                alert("注册失败!");
            }
        }
    });

    return false;
});

示例2. Ajax提交评论表单

class CommentFormView(FormView):
    form_class = CommentForm
    template_name = 'comment.html'
    success_url = reverse_lazy('success')

    def form_valid(self, form):
        data = form.cleaned_data # 获取表单数据

        # 将data保存到数据库中
        comment = Comment(name=data.get('name'), email=data.get('email'), content=data.get('content'))
        comment.save()

        # 处理表单数据并构造JSON格式数据
        return self.form_valid_json(form, {'success': True, 'message': '评论成功!'})
$(document).on('submit', '#comment-form', function (event) {
    event.preventDefault(); // 防止表单默认提交
    var formData = $(this).serialize();
    var url = $(this).attr('action');

    $.ajax({
        type: "post",
        url: url,
        data: formData,
        dataType: "json",
        success: function (data) {
            if (data['success']) {
                alert(data['message']);
            } else {
                alert("评论失败!");
            }
        }
    });

    return false;
});

以上就是form_valid_json()函数的作用和使用方法攻略,希望对您有所帮助。