始终从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/装饰基于类的视图

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

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像