内容类型和表示

时间:2009-10-14 00:57:05

标签: django url url-routing content-type

在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语句或很多重复的代码。

1 个答案:

答案 0 :(得分:7)

如果要解决这个问题,我可能会做的是:

  • 您的观点会查找Accept标题(我认为这就是您所说的内容),并根据Accept标题确定要发回的内容类型。
  • 您有一个中间件,它在Request-URI中查找扩展名,将其删除,并将关联的内容类型添加到请求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内容的响应。