django的json帮助程序的轻量级集合。

django-argonauts的Python项目详细描述


Building Status

django的json帮助程序的轻量级集合。包括模板筛选器 为了安全地输出json,可以对json进行编码和解码的视图,以及 编写简单的rest视图。

一个特殊的json编码器用于序列化queryset和对象 to_json方法。

过滤器

可以使用|json过滤器在json中序列化对象。这很有用 生成安全的javascript:

{% load argonauts %}
<scripttype="application/javascript">(function(){varobject_list={{object_list|json}};// do something with object_list
})();</script>

|json可以安全地在xml或xhtml中的任何地方使用,但在属性中除外。是的 使用此标记而不是将json.dumps的输出转储到 HTML,因为攻击者可以输出结束标记并实施XSS攻击。 例如,如果我们在这样的模板中输出json.dumps("</script><script>console.log('xss');//")

<script>varsomedata={{somedata_as_json|safe}};</script>

我们得到:

<script>varsomedata="</script><script>console.log('xss');//";
</script>

这允许攻击者插入自己的javascript。|json标记 通过使用json的unicode编码结束的</script>标记来防止这种情况 逃走。如果我们输出{{ somedata|json }},我们得到:

<script>varsomedata="\u0060xscript\u0062x\u0060xscript\u0062xconsole.log('xss');//";</script>

它还转义与号,以便生成有效的XML。例如,使用 foo & bar

<document><json>{{ value|json }}</json></document><!-- Results in valid XML:
<document><json>"foo \u0038x bar"</json></document>
-->

视图

JsonResponseMixin

JsonResponseMixin实现render_to_response序列化的方法 将对象转换为json响应。因此它与泛型django兼容 视图:

fromdjango.dbimportmodelsfromdjango.views.generic.detailimportBaseDetailViewfromargonauts.viewsimportJsonResponseMixinclassBlog(models.Model):title=models.CharField(max_length=255)body=models.TextField()defto_json(self):return{'title':self.title,'body':self.body,}classBlogDetailView(JsonResponseMixin,BaseDetailView):"""
    Detail view returning object serialized in JSON
    """model=Blog

JsonRequestMixin

JsonRequestMixin允许通过data()方法访问请求数据。

fromdjango.views.generic.baseimportViewfromargonauts.viewsimportJsonRequestMixin:fromargonauts.httpimportJsonResponseclassEchoView(JsonRequestMixin,View):defdispatch(self,*args,**kwargs):returnJsonResponse(self.data())

RestView

RestView是一个抽象类。子类应该实现auth(),用于 处理身份验证和至少一个http方法。

RestViewimplementsoptionshttp方法,并继承自 JsonRequestMixinJsonResponseMixin

fromdjango.core.exceptionsimportPermissionDeniedfromargonauts.viewsimportRestViewfrom.utilsimportget_actionclassCrazyRestView(RestView):defauth(self,*args,**kwargs):ifnotself.request.user.is_superuser:raisePermissionDenieddefpost(self,*args,**kwargs):action=kwargs.pop('action')action_func=get_action(action)returnself.render_to_response(action_func(self.data()))

变更日志

1.2.0(2016-09-20)

  • 向jsontestclient添加对不带内容类型头的请求的支持
  • 删除对旧版本django的支持(<;=1.7)

1.1.4(2015-07-29)

  • 模拟的测试http请求并不总是具有字符集

1.1.3(2015-05-27)

  • 固定包(包括MANIFEST.in中的变更日志)

1.1.2(2015-05-27)

  • 添加了JsonTestCaseJsonTestMixin

1.1.1(2015-04-20)

  • 固定套餐

1.1.0(2015-04-20)

清理:

  • 放弃对django 1.3的支持
  • 增加了对Python3的支持
  • 更新的文档
  • 将测试切换到py.test
  • 切换到zest.releaser

1.0.1(2013-10-06)

  • 固定测试

1.0.0(2013-07-05)

初始版本:

  • 从Django FusionBox中提取
  • 安全的json序列化程序
  • 安全的json模板过滤器
  • json视图

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

推荐PyPI第三方库


热门话题
java测试SpringAOP方面   java在使用groovy访问JSON字段时遇到问题   java需要但没有被调用:<Capturing argument>实际上,与这个mock没有任何交互   java在O(n)时间内遍历LinkedList并删除k个元素   java在Hibernate中执行条件查询后,是否需要提交/关闭会话?   java提供apacheshiro作为JBoss7、WildFly8的模块   使用标头读取CSV,同时忽略JAVA中的某些行   java如何验证kotlin中的数据类是否为null   java墙纸未缩放到设备的显示   java以独立于实现的方式列出所有注册的JAXRS 2提供程序   java Apache ANT Exec Handle Exec/CakePHP控制台提示   java无法从dropwizard项目中排除logbackclassic依赖项   java如何通过对象向构造函数发送日期值,以及如何返回该日期值?   java为什么使用静态记录器比不使用它花费更多的时间   JavaAndroid:解析webview的内容而不重新加载和发布   java如何仅捕获异常类型   eclipse无法从Java独立项目中的ATL EMFTVM转换中读取模块   另一个路由中的java Apache camel blueprint web服务响应