python中合适的内容协商谈判者是对内容协商请求进行决策的库。它接受标准的http accept头(accept、accept language、accept charset、accept encoding),并根据服务器可接受的参数对它们进行合理化;然后就适当的响应格式提出建议。此版本的谈判者还以接受打包的形式支持对http accept的swordv2扩展。

negotiator的Python项目详细描述


谈判者
========== < BR>
python的适当内容协商 < BR>
介绍
---- < BR>
谈判者提供了一个基于http接受头的内容协商决策框架。 < BR>
请注意,它目前仅正式支持accept和accept语言,但支持accept charset和accept编码(todo)是一个很短的过程。 < BR>< BR>
基本用法
----- < BR>
从协商模块导入所有对象 < BR>
>;>>从谈判者导入内容谈判者,接受参数,内容类型,语言 < BR>
指定默认参数。这些参数将用来代替协商请求中不存在的任何http接受头。例如,如果accept language头没有传递给谈判者,它将假定客户机请求是"en" < BR>
>;>;默认_params=acceptparameters(contenttype("text/html"),language("en")) < BR>
指定服务器支持的可接受格式列表 < BR>
>;>>可接受=[接受参数(contentType("text/html"),language("en"))]
>;>>可接受。追加(acceptparameters(contenttype("text/json"),language("en")) < BR>
创建协商者的实例,准备接受协商请求 < BR>
>>>cn=内容协商者(默认参数,可接受) < BR>
在http接受头"text/json;q=1.0,text/html;q=0.9"上进行简单协商,请求json,如果不是json,则请求html < BR>
>>>可接受=cn.协商(accept="text/json;q=1.0,text/html;q=0.9") < BR>
谈判者指出,服务器对客户端请求的最佳匹配是英文文本/json < BR>
>>>可接受
接受参数::内容类型:文本/json;语言:en; < BR>< BR>
高级使用
----- < BR>
从协商模块导入所有对象 < BR>
>;>>从谈判者导入内容谈判者,接受参数,内容类型,语言 < BR>
指定默认参数。这些参数将用来代替协商请求中不存在的任何http接受头。例如,如果accept language头没有传递给谈判者,它将假定客户机请求是"en" < BR>
>;>;默认_params=acceptparameters(contenttype("text/html"),language("en")) < BR>
指定服务器支持的可接受格式列表。对于这个高级示例,我们用多种语言指定html、json和pdf < BR>
>;>>可接受=[接受参数(contentType("text/html"),language("en"))]
>;>>可接受。追加(acceptparameters(contenttype("text/html"),language("fr"))
>;>>可接受。追加(acceptparameters(contenttype("text/html"),language("de"))
>;>>可接受。追加(acceptparameters(contenttype("text/json"),language("en"))
>;>>可接受。追加(acceptparameters(contenttype("text/json"),language("cz"))
>;>>可接受。追加(acceptparameters(contenttype("application/pdf")、language("de")) < BR>
指定谈判者应应用于不同接受头的权重。对内容类型的更高权重将优先于内容类型变体而不是语言变体(例如,如果有两种格式在不同的语言中同样为客户所接受,则高于语言权重的内容类型权重将根据SER返回参数ver的首选内容类型。 < BR>
>>gt;权重={"内容类型":1.0,"语言":0.5} < BR>
创建协商者的实例,准备接受协商请求 < BR>
>>>cn=内容协商者(默认参数,可接受,w) < BR>
设置一些更复杂的accept头(您可以尝试修改没有q值的元素的顺序以及q值本身,以查看不同的结果)。 < BR>
>>accept="文本/html,文本/json;q=1.0,应用程序/pdf;q=0.5"
>>>接受"en;q=0.5,de,cz,fr" < BR>
在两个报头上协商,寻找客户机请求的最佳解决方案 < BR>
>>>可接受=中国谈判(接受,接受语言) < BR>
谈判代表指出最适合客户请求的是德语文本/html < BR>
>>>可接受
接受参数::内容类型:文本/html;语言:de; < BR>< BR>
偏好排序规则
--- < BR>
谈判者将每个接受标题中的首选项组织成一个序列,
从最高q值到最低q值,将相等的q值组合在一起。 < BR>
例如,http accept头: < BR>
"文本/html,文本/json;q=1.0,应用程序/pdf;q=0.5" < BR>
将生成以下首选项序列(作为python字典): < BR>
{
1.0:["文本/json","文本/html"],
0.5:["应用程序/pdf"]
< BR>
而http接受语言头: < BR>
"en;q=0.5,de,cz,fr" < BR>
将生成以下首选项序列(作为python字典): < BR>
{
1.0:["de"],
0.8:["CZ"],
0.6:["fr"],
0.5:["en"]
< BR>
(实际上,de、cz和fr的q值将在1.0和0.5之间均匀分布,使用浮点数作为键) < BR>< BR>
组合优先顺序规则
< BR>
谈判者将计算所有可能允许的组合及其加权总q值。 < BR>
假设服务器支持以下组合(从上面的代码示例来看): < BR>
文本/html,英文
文本/html,fr
文本/html,de
文本/json,英文
文本/json,cz
应用程序/pdf,de < BR>
给定重量: < BR>
w={"内容类型":1.0,"语言":0.5} < BR>
我们可以使用以下公式计算每个允许选项(服务器和客户端)的组合Q值: < BR>
总体Q=W["内容类型"]*内容类型Q+W["语言"]*语言 < BR>
因此,对于上一节中的上述选项和q值,我们可以生成首选项列表(作为python字典): < BR>
{
1.5:["文本/html,de"],
1.4:["文本/json,cz"],
1.3:["文本/html,fr"],
1.25:["文本/html,en","文本/json,en"]
1.0:["应用程序/pdf,de"]
< BR>
很明显,高级用法部分的谈判者为什么选择"text/html,de"作为首选格式。 < BR>

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

推荐PyPI第三方库


热门话题
java静态对象初始化   java请求的资源上不存在“Accesscontrolalloworigin”头。起源http://localhost:4200因此不允许访问   java i无法通过executor的submit方法处理列表的所有记录   javadoc中的java文档逻辑   java如何使RCPPlugin独立   java使用cobertura插件跳过*测试*   验证Java处理多个可能未知的日期/时间格式   java将JPanel添加到JFrame   BB 7.0中的黑莓Java标签   java动态地向注释处理环境添加类型   java如何将头信息作为键值对传递给使用jersey的rest服务   java使用ImageJ调整图像大小并裁剪图像   为什么Java8的ToIntFunction<t>不扩展函数<t,Integer>   java无法向Jackson ObjectMapper类注册模块   解析如何将此jsonarray解析为字符串或数组java   如何从Java调用具有数值参数的Scala方法   类如何从ColdFusion实现Java接口?   java如何让线程只添加到一个带有同步