在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,移动,掌上电脑)和完整的浏览器表示?
观点怎么样?选择正确模板的惯例是什么,没有大量的if语句或很多重复的代码。
答案 0 :(得分:7)
如果要解决这个问题,我可能会做的是:
Accept
标题(我认为这就是您所说的内容),并根据Accept
标题确定要发回的内容类型。Accept
标题中。对于此解决方案,URL中的内容类型将始终表示为关联的文件扩展名,既不是查询字符串的一部分,也不是资源名称的一部分。但除了浏览器生成的请求外,内容类型应通过Accept
标头进入。
所以请求的来源是:
GET /blogs/123.xml HTTP/1.1
Host: example.com
中间件将其转换为:
GET /blogs/123 HTTP/1.1
Host: example.com
Accept: application/xml
您的视图会看到application/xml
并返回包含XML内容的响应。