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

  • Post category:Python

get_success_json()函数是Django框架中一个常用的辅助函数,用于在API中响应请求成功的返回数据。其主要作用是将传入的数据字典序列化成JSON格式的http响应。

使用方法:

先在views.py中导入如下模块

from django.http import JsonResponse
from django.views.generic import View

然后再在自定义的API视图类中定义响应成功的方法 get_success_json(),该方法的参数应该是响应请求成功的数据。

class MyAPIView(View):
    def get_success_json(self, data):
        return JsonResponse({
            'code': 200,
            'msg': 'success',
            'data': data
        })

如上所示,函数会返回一个JSON响应,包含3个键值对,分别为 codemsgdata。其中,data为调用 get_success_json()方法时传入的数据字典,msg为固定字符串"success"code输入200。

接下来,在API视图类中使用 get_success_json() 返回成功数据,示例代码如下:

class MyAPIView(View):
    def get(self, request):
        queryset = MyModel.objects.all()
        serialized_data = MyModelSerializer(queryset, many=True).data
        return self.get_success_json(serialized_data)

上面的示例中,View 类中的get()方法返回的是成功响应的数据,使用 queryset 生成 MyModelSerializer 序列化类,并把返回的序列化对象(即serialized_data)作为参数传入get_success_json()方法中。

另外,下面两个实例演示了如何使用 get_success_json()方法来响应成功请求。

第一个示例:

class MyAPIView(View):
    def get_success_json(self, data):
        return JsonResponse({
            'code': 200,
            'msg': 'success',
            'data': data
        })

    def get(self, request, id):
        queryset = MyModel.objects.filter(id=id)
        serialized_data = MyModelSerializer(queryset, many=True).data
        return self.get_success_json(serialized_data)

在这个示例中,应用了通过 id 获取指定的模型对象,然后序列化模型对象或模型查询集生成序列化数据,将其传递到get_success_json()方法中处理,最后返回 JSON 数据。

第二个示例:

class MyAPIView(View):
    def get_success_json(self, data):
        return JsonResponse({
            'code': 200,
            'msg': 'success',
            'data': data
        })

    def post(self, request):
        data = request.POST
        serialized_data = MySerializer(data=data)

        if serialized_data.is_valid():
            serialized_data.save()
            return self.get_success_json(serialized_data.data)
        else:
            return JsonResponse({
                'code': 400,
                'msg': 'invalid data',
                'errors': serialized_data.errors
            })

在这个实例中,当使用POST方法向服务器发送数据时,程序首先根据请求中的数据,调用MySerializer对数据进行验证。如果验证成功,数据将存储到数据库中。如果请求中的数据验证失败,就会返回400错误码与错误信息。如果数据验证成功,则调用get_success_json()方法对序列化的数据进行处理,最终返回JSON格式的成功数据响应。