来自视图的标准化JSON响应

Mri*_*lla 0 python django json response django-views

当我的页面将表单发布到我的Django视图时,视图会返回包含一些数据的响应,但很快我就遇到了我的视图以不同格式和不同信息集返回数据的问题.我曾想过使用JSON作为标准格式来返回我的数据.

有两种类型的状态,successfailure.当POST成功时,它只是返回success但是当它失败时,它返回一个被调用的子组errors,其中包含一个字段和该字段的错误.

这是一个示例failure响应:

{"failure": {
    "errors":[
        {"fieldname": "<fieldname>", 
         "fielderror": "<fielderror>"
        },
        {"fieldname": "<fieldname>", 
         "fielderror": "<fielderror>"
        }]
}}
Run Code Online (Sandbox Code Playgroud)

这是一个示例success响应:

{"success": {
    "data":[
        {"fieldname": "<fieldname>", 
         "fielddata": "<fielddata>"
        },
        {"fieldname": "<fieldname>", 
         "fielddata": "<fielddata>"
        }]
}}
Run Code Online (Sandbox Code Playgroud)

(成功响应有数据字段,因为您经常想要返回一些数据,即新创建的数据库记录的密钥.)

这就是我想出来的,但有很多人在那里使用Django,我想知道是否有一种标准的方式/更强大的做这个或一些模块来帮助解决这个问题.

谢谢.

kus*_*sut 8

到过那里.我自己编写了解决方案(因为它很简单.我不知道是否有一个模块用于此).这只是一个json响应包装器

from django.utils import simplejson
from django.http import HttpResponse

class JsonResponse(HttpResponse):
    def __init__(self, data):
        content = simplejson.dumps(data)
        super(JsonResponse, self).__init__(content=content,
                                           mimetype='application/json')

class Success(JsonResponse):
    def __init__(self, something):
        x = something # set your data here
        content = {'success': {'data': x}}
        super(Success, self).__init__(content)


class Failure(JsonResponse):
    def __init__(self, something):
        x = something # set your data
        content = {'failures': {'errors': x}}
        super(Failure, self).__init__(content)
Run Code Online (Sandbox Code Playgroud)

类似的东西.在我的例子中,我制作SuccessFailure接受一个字符串和一个字典作为参数(比如Success(data)),使它更容易

如果你的结构非常复杂(或者你也懒得手工编写它们),那么为这个复杂的结构编写你自己的包装器(这样你就可以用更少的输入创建响应),并使成功/失败接受它作为参数.