详解Django的 get_success_json() 函数:获取表单验证成功后的 JSON 数据

  • Post category:Python

get_success_json()是Django框架中django.views.generic.edit.ModelFormMixin类中的一个方法,主要用于在提交表单成功后,返回JSON格式的响应数据。

get_success_json()方法的使用方法非常简单,只需要在需要使用的视图中继承ModelFormMixin类,然后重写get_success_json()方法即可。该方法需要返回一个字典类型的JSON数据,该JSON数据将用于Ajax请求后的响应。

以下是该函数的完整定义:

class ModelFormMixin:
    # ...

    def get_success_json(self, form):
        return JsonResponse({'success': True})

其中,form参数是表单对象,我们可以通过该参数的值获取表单数据并进行处理。

给出两个实际的例子:

实例一

当用户在网站上注册成功后,需要返回JSON格式的响应给确认页面,可以使用get_success_json()方法。具体的实现方法如下所示:

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

class RegisterView(FormView):
    template_name = 'register.html'
    form_class = RegisterForm
    success_url = 'thanks/'

    def form_valid(self, form):
        form.save()
        return self.get_success_response()

    def get_success_response(self):
        if self.request.is_ajax():
            return self.get_success_json(form=self.form)
        return super().form_valid(form)

    def get_success_json(self, form):
        return JsonResponse({'success': True})

上述代码中,定义了一个RegisterView类,通过继承FormViewModelFormMixin类,实现了表单提交功能,当注册成功时,如果是Ajax请求,则会返回JSON格式的响应数据。

实例二

假设我们需要在向数据库中插入新的数据成功后,在前端页面中返回插入成功的文本信息,可以使用get_success_json()方法来实现。

class NewsCreateView(LoginRequiredMixin, CreateView):
    model = News
    form_class = NewsCreateForm
    template_name = 'news_add.html'

    def form_valid(self, form):
        self.object = form.save()
        return self.get_success_response()

    def get_success_response(self):
        if self.request.is_ajax():
            return self.get_success_json(form=self.object)
        return super().form_valid(form)

    def get_success_json(self, form):
        return JsonResponse({'success': True, 'message': '恭喜您,添加新闻成功!'})

上述代码中,定义了一个NewsCreateView类,通过继承CreateViewModelFormMixin类,实现了添加新闻的功能,当添加成功时,如果是Ajax请求,则会返回JSON格式的响应数据,包含插入成功的文本信息。