简单地包装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
});

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在Android的Rest服务中传递列表<Integer>对象和字符串   java Hibernate集合初始化问题   java用ByteBuddy定义一个方法、调用、拦截器和委托给目标?   java递归对象删除   java用标签填充GridPane   java使用ApachePOI在word文档中添加水印   java如何可视化地使用在NetBeans中扩展组件的类?   javascript如何在java web应用程序中刷新页面后保留选中的单选按钮   在Java中,小程序试图使用MouseListener绘制矩形会导致程序崩溃,而不会生成异常   java如何在子注释上下文中使用spring属性源?   当应用到FactoryBean时,java会执行Spring的@Lazy工作吗?   java验证二进制代码和无无限循环的重复程序   java如何将ArgumentCaptor与Mockito一起使用。when()。然后返回()   使用JPA为视图定义DTO和存储库的java问题