视图中的标准化JSON响应
当我的页面向Django的视图发送一个表单时,视图会返回一些数据的响应。但我很快就遇到了一个问题:我的视图返回的数据格式和信息内容各不相同。我想到了使用JSON作为返回数据的标准格式。
这里有两种状态,success
(成功)和failure
(失败)。当POST请求成功时,它只返回success
,但如果失败了,它会返回一个叫errors
的子组,里面包含了一些字段和这些字段的错误信息。
以下是一个failure
(失败)响应的示例:
{"failure": {
"errors":[
{"fieldname": "<fieldname>",
"fielderror": "<fielderror>"
},
{"fieldname": "<fieldname>",
"fielderror": "<fielderror>"
}]
}}
以下是一个success
(成功)响应的示例:
{"success": {
"data":[
{"fieldname": "<fieldname>",
"fielddata": "<fielddata>"
},
{"fieldname": "<fieldname>",
"fielddata": "<fielddata>"
}]
}}
(成功的响应中包含数据字段,因为通常你会想返回一些数据,比如新创建的数据库记录的键值。)
这是我想到的解决方案,但考虑到有很多人使用Django,我在想是否有更标准或更稳健的方法,或者有没有什么模块可以帮助实现这个功能。
谢谢。
4 个回答
0
我不知道这对你有多大帮助,但Python确实有一个叫做json
的模块。
>>> import json
>>> json.dumps({'a':'b', 'c':'d'})
'{"a": "b", "c": "d"}'
0
你知道怎么用Python的字典吗?如果知道的话,有一些库可以把你的Python字典转换成有效的JSON格式。比如,Django自带的库就是simplejson
。下面是一个例子:
from django.utils import simplejson
def my_view(request):
....
my_json = simplejson.dumps(my_dict) #dumps a JSON string from a dict
my_dict_again = simplejson.loads(my_json) #loads a Python dict from a JSON string
return HttpResponse(json, mimetype="application/json")
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)
大概就是这样。在我的情况下,我让 Success
和 Failure
接受一个字符串和一个字典作为参数(比如 Success(data)
),这样使用起来更方便。
如果你的数据结构比较复杂(或者你懒得手动写),可以自己写一个工具来处理这个复杂的结构(这样你就可以用更少的输入来创建响应),然后让 Success/Failure 接受这个作为参数。