django中基于内容协商类视图的实现

django-conneg的Python项目详细描述


django的内容协商框架
==


n最近的发行版,或使用pip::


``pip``在fedora上称为`pip python`'。它通常由
``python pip``包提供。

这里的ntext
}

\call render,传递一个模板名(不带文件扩展名)
return self.render(request,context,index')

视图不提供呈现器,因此上面的代码片段
将始终返回405,这是不可接受的,它告诉用户代理它
无法以建议的格式提供响应。

若要在视图上定义呈现器,请执行以下操作:


import json

from django.http import http response

from django-conneg.decorators导入renderer

模型对象、表单等。
返回httpresponse(json.dumps(context),mimetype='application/json')

…注意:
``django conneg``已经提供了稍微复杂一点的jsonview;
请参见下面的详细信息。

如果某些条件:
返回self.render\u为u格式(请求、上下文、"索引"、"html")
否则:
返回self.render(请求、上下文、"索引")



请求通过
使用"format"查询或post参数尝试特定的渲染器集:

get/some view/?format=json,yaml

格式对应于`` format``参数到`` renderer``
装饰符。

若要更改所用参数的名称,请重写视图类:


g回退渲染器
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

有时您可能希望以某种格式提供响应,即使接受头中的
无法兑现。当以不同格式向客户机的预期格式提供
错误响应时,这非常有用。若要执行此操作,请将"强制回退格式"属性设置为格式名称:


class myview(contentNegotiatedView):
u强制回退格式="html"


如果客户端不提供接受头,则可以使用"默认格式"指定默认格式:

class myview(contentNegotiatedview):
默认格式为"html"

-在
``django\u conneg.views``模块中的呈现器中:

*``htmlview``(呈现媒体类型为`text/html````.html``模板)
*``textview`(呈现媒体类型为`text/plain`````.txt``模板)
*``jsonview`(将上下文强制为javascript原语并返回s``application/json``)
*``jsonpview``(作为``json view``,但包装在回调中并返回``application/javascript`)

xview(jsonview,htmlview):
def get(self,request):

返回self.render(request,context,index')

响应对象的属性:

class indexview(jsonview,htmlview):
def get(self,request):

response=self.render(request,context,index')
response['x-renderer-format']=response.renderer.format
re转动响应



渲染器优先级
----


某些用户代理可能会指定不同的媒体类型,这些媒体类型具有相同的
期望级别。例如,以前版本的safari和chrome用来发送http://www.gethifi.com/blog/browser rest http accept headers highlighter>;` br/>这样的"accept"头::

application/xml,application/xhtml+xml,text/html;q=0.9,
text/plain;q=0.8,image/png,*/*;q=0.5

xview(contentNegotiatedView):
@呈现器(format='xml',mimetypes=('application/xml',),name='xml',priority=0)
定义呈现器XML(请求、上下文、模板名称):


@renderer(format='html',mimetypes=('application/xhtml+xml','text/html),name="html",priority=1)
def render_html(请求、上下文、模板名称):


渲染器的优先级为0,除了"htmlview"和"textview"的优先级分别为1之外,因为上面给出的原因,






`` permissiondenied``,您可能希望在应用程序中使用它。但是,
只有通过提供一个
``404.html``模板,或者通过在urlconf中设置``handler404``才能定制404站点范围,并且在django 1.4发布之前,
被拒绝的权限总是会导致一个非常
的错误页面。

``django conneg``provid是一个"errorcatchingview",您可以将其用作
mixin来自定义这些错误情况下的响应呈现:


from django_conneg.views import htmlview,errorcatchingview


class indexview(htmlview,errorcatchingview):
以下列方式之一自定义错误响应:

*重写视图上的"conneg/(forbidden not found not acceptable)。(html txt)模板fy非标准模板名称:

在后一种情况下,您可以执行如下操作::


import httplib
from django.util.datastructures import mergedict
从django_conneg.视图导入htmlview,errorcatchingview

class indexview(htmlview,errorcatchingview):
提供特定于视图的404页。使用mergedict为其他类型的错误使用django_conneg的默认值。
error_template_names=mergedict({httplib.not_found:'foo/404'},
errorcatchingview.error_template_names)





----

``django conneg``有一个适度的测试套件。要运行它,请转到
存储库的根目录并运行::



如果没有django,则需要按照上面
先决条件部分中的详细说明安装它。

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

推荐PyPI第三方库


热门话题
安卓中通过TCP发送时java文件损坏   Java测试预期=异常失败,断言错误   java ssh4 LazyInitializationException   java是否可以在集合中添加重复项?   java是一个免费的开源数据库管理工具   java是否可以在导出的html中嵌入图像   编译器构造解释一些东西,并用Java运行生成的字节码?   java KeyPairGenerator未生成随机密钥   java使用正则表达式生成字符串而不是匹配字符串   java中的多线程线程间通信   具有复合密钥的java Hibernate合并问题   java不能在MainActivity类之外使用SharedReferences变量   正在获取切割/零件异常消息。使用java Spring ControllerAdvice   java tomcat漏洞讨论   javascript在Java中实现“system”命令   java如何在JUnit5*中加载*Spring测试上下文之前获取回调?   java bluej关于缺少返回语句   JavaSpringBoot@ModelAttribute包含使用字符串键的其他模型   从可选中抛出异常。ifPresent()Java 8