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,则需要按照上面
先决条件部分中的详细说明安装它。
==
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,则需要按照上面
先决条件部分中的详细说明安装它。