简单地包装django视图以呈现json
django-jsonresponse的Python项目详细描述
包装视图函数,允许它们呈现python本地和自定义 对象到JSON
用法
简单地将返回的数据包装成json
fromjsonresponseimportto_json@to_json('plain')defhello(request):returndict(hello='world')
GET /hello/ {"hello": "world"}
结果可以包装在一些API手册中。注意,可以将debug=1传递给 漂亮的打印响应。使用JSONRESPONSE_DEFAULT_DEBUG=True启用 默认情况下。
@to_json('api')defgoodbye(request):returndict(good='bye')
GET /goodbye/?debug=1 { "data": { "good": "bye" }, "err": 0 }
自动错误处理,注意此处的响应代码为500
@to_json('api')deferror(request):raiseException('Wooot!??')
GET /error/ { "err_class": "Exception", "err_desc": "Wooot!??", "data": null, "err": 1 }
可以传递raise=1以在调试时引发异常,而不是 将信息传递给json响应
GET /error/?raise=1 Traceback (most recent call last): Exception: Wooot!??
您可以将自定义Kwargs传递给json.dumps,只需将它们交给构造函数即可:
@to_json('plain',separators=(',',':'))defcustom_kwargs(request):return['a',{'b':1}]
GET / ["a",{"b":1}]
您不仅可以序列化纯python数据类型。实施 serialize方法在顶层对象或顶层的每个元素上 阵列。注意,请求对象被传递给serialize方法。
classUser(object):def__init__(self,name,age):self.name=nameself.age=agedefserialize(self,request):ifrequest.GET.get('with_age',False):returndict(name=self.name,age=self.age)else:returndict(name=self.name)@to_json('objects')defusers(request):return[User('Bob',10),User('Anna',12)]
GET /users/?with_age=1 { "data": [ { "age": 10, "name": "Bob" }, { "age": 12, "name": "Anna" } ], "err": 0 }
使用jsonp很容易,只要传递format=jsonp就可以了
GET /users/?format=jsonp callback({ "data": [ { "name": "Bob" }, { "name": "Anna" } ], "err": 0 });
您可以使用 JSONRESPONSE_CALLBACK_NAME选项或查询参数 callback=另一个回调
GET /users/?format=jsonp&callback=my_callback my_callback({ "data": [ { "name": "Bob" }, { "name": "Anna" } ], "err": 0 });