始终从django视图返回json。
django-jsonview的Python项目详细描述
=====
django jsonview
====
图片::https://travis-ci.org/jsocol/django-jsonview.png?branch=master
:target:https://travis ci.org/jsocol/django json view
**django jsonview**是一个简单的装饰器,它将python对象
转换为json,并确保您的视图始终返回json。
它
在一个包中。
并从json view返回json可序列化对象:
。decorators导入json视图
@json视图
def my_视图(请求):
return{
'foo':'bar',
}
`class-based视图`(cbvs)可以从jsonview继承,使用django的
``@method\u decorator``或包装输出``.as\view()`::
self).get_context_data(**kwargs)
context['my_key']="some value"
返回context
方法decorator
来自django.utils.decorators导入方法decorator
来自json view.decorators导入json视图self).dispatch(*args,**kwargs)
]
内容类型
----
如果需要返回标准
``application/json``以外的内容类型,可以在decorator中用
``content`type``参数指定,例如:从json view.decorators导入json视图值
----
包括:
*``http404`
*``permissiondenied``
*``httpresponsenotallowed``(例如``require\u get`,``需要"post`)"
*``jsonview.exceptions.badrequest``(见下文)
*任何其他异常(记录到``django.request``)。
这些异常中的任何一个都将返回正确的状态代码(即404,
403405,400,500),内容类型为``application/json`,还有一个
响应体,它看起来像::
"错误":状态代码,
"消息":str(异常),
})
注意:
从v0.4开始,如果
``debug=false``,应用程序异常不会**以这种方式运行。当"debug=false"时,"message"值始终为"发生错误"。当``debug=true``时,异常
消息被发回。
``badrequest`
——
http没有"您提交了一个
未验证的表单"的良好状态代码,因此django不太支持它。大多数
示例只返回200 OK。
通常,这很好。但是,如果您通过ajax提交表单,最好有一个"ok"和"nope"的不同状态。http 400 bad
request response是一个请求的回退
没有另外指定,所以让我们这样做。
要使``@json\u view``返回400,只需提出一个
``json view.exceptions.badrequest``有任何适当的错误
消息。
exceptions
——
500的状态,以及类似于"返回值"部分中的异常的正文。
…注意::
因为`@json\u view``装饰器处理异常而不是传播异常,所以任何异常中间件都将**不被调用,并且
任何响应中间件**都将被**调用。
第一个是您的可序列化对象,第二个是整数状态代码:
@json\u view
def myview(request):
如果不是request.user.is\u subscribed():
发送402付款所需状态。
返回{'subscribed':false},402
#发送一个200 OK。
返回{'Subscribed':true}
还有一个标题字典。
:
@json视图
def myview(请求):
return{},200,{'x-server':'myserver'}
`` httpresponse``
对象(或子类)它将以不变的方式传递,例如::
from django import http
from json view.decorators import json
@json-view
def-caching-view(请求):
kached=cache.get('cache-key')
如果kached:
返回http.httpresponse(kached,content_type=json)
注意:
```@需要'u post``而其他http方法装饰器的工作方式是返回*一个响应,而不是*引发*一个异常,因此,
``httpresponsenotallowed``是专门处理的。
=======
json解析和生成库的健康集合。默认情况下,它将使用旧的备用模块stdlib``json`
。但是,如果您更愿意使用ujson、cjson或yajl,则应该使用它。只需将此添加到django设置中即可:
json_module='ujson'
anything,只要它是一个具有`.loads()``和`.dumps()``
方法的模块。
versionadded::0.5
其他关键字参数可以通过
``json\options={}``django设置传递给``json.dumps()`'。例如,要漂亮地打印json
输出::
"indent":4,
}
或压缩它::
"分隔符":(',',':'),
}
jsonview默认使用"djangojsonencoder"。要使用不同的json
编码器,请使用"cls"选项::
json u options={
"cls":"path.to.myjsonencoder",
}
"json"options['cls']``可以是虚线字符串或"json encoder`
类。
versionchanged::1.0
**如果您使用的json模块不支持"cls`
kwarg**,例如ujson,请将"cls`"选项设置为"none`":
"cls":none,
}
内容类型的默认值为"application/json"。您可以通过"json默认内容"类型"django sett"更改它这些。例如,若要添加字符集:
json_default_content_type='application/json;charset=utf-8'
atomic requests
===
,因为`@json_view``捕获异常,正常的django设置
`` atomic_requests`不会正确导致回滚。这可以通过在
`@json视图``decorator下面显式设置``@transaction.atomic```*来解决,例如:
@json视图
@transaction.atomic
def my_func(请求):
`…
contribution
==
`pull requests`问题欢迎!我问两个简单的问题:
-测试,包括您添加的新测试,必须通过。(见下文。)
-覆盖范围不应低于100。您可以使用
pip安装"coverage",然后运行`./run.sh coverage``进行检查。
-flake8`工具不应返回任何问题。
然后
install django和mock with``pip`::
,然后使用::
./run.sh test
_日志记录器:
https://docs.djangoproject.com/en/dev/topics/logging/django request
…_拉取请求:https://github.com/jsocol/django jsonview/pulls
。_问题:https://github.com/jsocol/django jsonview/issues
…_ virtualenv:http://www.virtualenv.org/
。_ ujson:https://pypi.python.org/pypi/ujson
。_中日韩:https://pypi.python.org/pypi/python中日韩
…_ yajl:https://pypi.python.org/pypi/yajl
。_基于类的视图:https://docs.djangoproject.com/en/1.9/topics/class-based views/intro/装饰基于类的视图
django jsonview
====
图片::https://travis-ci.org/jsocol/django-jsonview.png?branch=master
:target:https://travis ci.org/jsocol/django json view
**django jsonview**是一个简单的装饰器,它将python对象
转换为json,并确保您的视图始终返回json。
它
在一个包中。
并从json view返回json可序列化对象:
。decorators导入json视图
@json视图
def my_视图(请求):
return{
'foo':'bar',
}
`class-based视图`(cbvs)可以从jsonview继承,使用django的
``@method\u decorator``或包装输出``.as\view()`::
self).get_context_data(**kwargs)
context['my_key']="some value"
返回context
方法decorator
来自django.utils.decorators导入方法decorator
来自json view.decorators导入json视图self).dispatch(*args,**kwargs)
]
内容类型
----
如果需要返回标准
``application/json``以外的内容类型,可以在decorator中用
``content`type``参数指定,例如:从json view.decorators导入json视图值
----
包括:
*``http404`
*``permissiondenied``
*``httpresponsenotallowed``(例如``require\u get`,``需要"post`)"
*``jsonview.exceptions.badrequest``(见下文)
*任何其他异常(记录到``django.request``)。
这些异常中的任何一个都将返回正确的状态代码(即404,
403405,400,500),内容类型为``application/json`,还有一个
响应体,它看起来像::
"消息":str(异常),
})
注意:
从v0.4开始,如果
``debug=false``,应用程序异常不会**以这种方式运行。当"debug=false"时,"message"值始终为"发生错误"。当``debug=true``时,异常
消息被发回。
``badrequest`
——
http没有"您提交了一个
未验证的表单"的良好状态代码,因此django不太支持它。大多数
示例只返回200 OK。
通常,这很好。但是,如果您通过ajax提交表单,最好有一个"ok"和"nope"的不同状态。http 400 bad
request response是一个请求的回退
没有另外指定,所以让我们这样做。
要使``@json\u view``返回400,只需提出一个
``json view.exceptions.badrequest``有任何适当的错误
消息。
exceptions
——
500的状态,以及类似于"返回值"部分中的异常的正文。
…注意::
因为`@json\u view``装饰器处理异常而不是传播异常,所以任何异常中间件都将**不被调用,并且
任何响应中间件**都将被**调用。
第一个是您的可序列化对象,第二个是整数状态代码:
@json\u view
def myview(request):
如果不是request.user.is\u subscribed():
发送402付款所需状态。
返回{'subscribed':false},402
#发送一个200 OK。
返回{'Subscribed':true}
还有一个标题字典。
:
@json视图
def myview(请求):
return{},200,{'x-server':'myserver'}
`` httpresponse``
对象(或子类)它将以不变的方式传递,例如::
from django import http
from json view.decorators import json
@json-view
def-caching-view(请求):
kached=cache.get('cache-key')
如果kached:
返回http.httpresponse(kached,content_type=json)
注意:
```@需要'u post``而其他http方法装饰器的工作方式是返回*一个响应,而不是*引发*一个异常,因此,
``httpresponsenotallowed``是专门处理的。
json解析和生成库的健康集合。默认情况下,它将使用旧的备用模块stdlib``json`
。但是,如果您更愿意使用ujson、cjson或yajl,则应该使用它。只需将此添加到django设置中即可:
json_module='ujson'
anything,只要它是一个具有`.loads()``和`.dumps()``
方法的模块。
versionadded::0.5
其他关键字参数可以通过
``json\options={}``django设置传递给``json.dumps()`'。例如,要漂亮地打印json
输出::
}
或压缩它::
}
jsonview默认使用"djangojsonencoder"。要使用不同的json
编码器,请使用"cls"选项::
json u options={
"cls":"path.to.myjsonencoder",
}
"json"options['cls']``可以是虚线字符串或"json encoder`
类。
versionchanged::1.0
**如果您使用的json模块不支持"cls`
kwarg**,例如ujson,请将"cls`"选项设置为"none`":
}
内容类型的默认值为"application/json"。您可以通过"json默认内容"类型"django sett"更改它这些。例如,若要添加字符集:
json_default_content_type='application/json;charset=utf-8'
atomic requests
===
,因为`@json_view``捕获异常,正常的django设置
`` atomic_requests`不会正确导致回滚。这可以通过在
`@json视图``decorator下面显式设置``@transaction.atomic```*来解决,例如:
@json视图
@transaction.atomic
def my_func(请求):
`…
contribution
==
`pull requests`问题欢迎!我问两个简单的问题:
-测试,包括您添加的新测试,必须通过。(见下文。)
-覆盖范围不应低于100。您可以使用
pip安装"coverage",然后运行`./run.sh coverage``进行检查。
-flake8`工具不应返回任何问题。
然后
install django和mock with``pip`::
,然后使用::
./run.sh test
_日志记录器:
https://docs.djangoproject.com/en/dev/topics/logging/django request
…_拉取请求:https://github.com/jsocol/django jsonview/pulls
。_问题:https://github.com/jsocol/django jsonview/issues
…_ virtualenv:http://www.virtualenv.org/
。_ ujson:https://pypi.python.org/pypi/ujson
。_中日韩:https://pypi.python.org/pypi/python中日韩
…_ yajl:https://pypi.python.org/pypi/yajl
。_基于类的视图:https://docs.djangoproject.com/en/1.9/topics/class-based views/intro/装饰基于类的视图