在Django中为资源(例如博客,用户)支持多种表示形式(例如html,json,xml)的通用约定是什么?
首先,我不知道如何格式化网址。例如,您对使用这些网址之一请求xml格式的看法
/<resource>.<format>
,例如/blogs/123.xml
/<format>/<resource>
,例如/xml/blogs/123
/<resource>?format=<format>
,例如/blogs/123?format=xml
我应该只依靠
Content-Type
传递的参数吗?具有多个移动设备代表(例如iPhone,移动设备,Palm)和完整的浏览器代表怎么办?意见呢?在没有大量if语句或大量重复代码的情况下选择正确模板的惯例是什么?
最佳答案
如果可以解决的话,我可能会做的是:
Accept
header (我认为您正在谈论的是该 header ),并根据Accept
header 确定要发回的内容类型。 Accept
header 中。 对于此解决方案,URL中的内容类型将始终表示为关联的文件扩展名,而不是查询字符串的一部分,也不是资源名称的一部分。但是,除了浏览器生成的请求之外,内容类型还应该通过
Accept
header 进入。因此,请求以以下形式出现:
GET /blogs/123.xml HTTP/1.1
Host: example.com
中间件将其转换为:
GET /blogs/123 HTTP/1.1
Host: example.com
Accept: application/xml
您的 View 将看到
application/xml
并返回带有XML内容的响应。
关于django - 内容类型和表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1563753/