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第三方库


热门话题
java如何通过编程将Android置于待机状态?   java mavenjarsignerplugin在Jenkins构建期间失败,但不是在命令行上   java创建具有公共ipv4地址的HttpServer   将数据从jsp传递到servlet的java返回null   Web应用程序中的java JDBC数据库连接   java无法显示unicode字符   java webview应用程序未上载图片或视频   Android客户端Java服务器,如果订单处理方式不正确,客户端将无法连接   java在不复制备份表的情况下创建备份表   集合如何在Java中实现列表折叠   java如何配置在JBoss7中使用EntityListeners?   java JVM ClassUnloadingWithConcurrentMark标志   java如何在Maven中排除特定的单元测试   java线程在SynchronousQueue中执行put操作后挂起   java中的hibernate Comparator和可比较的负面场景   数组中的java连接元素   拖放Java,让面板落在鼠标事件上   java是一种事务管理应用程序,无需在方法上使用@transactional   java有没有办法从安卓的软键板上删除这一行?