not*_*oop 5 django url content-type url-routing
在django中支持资源(例如博客,用户)的多重表示(例如html,json,xml)的常见惯例是什么?
首先,我不知道应该如何格式化我的网址.例如,您使用这些URL中的任何一个来请求xml格式
/<resource>.<format>
,例如 /blogs/123.xml
/<format>/<resource>
,例如 /xml/blogs/123
/<resource>?format=<format>
,例如 /blogs/123?format=xml
我应该只依赖Content-Type
传递的参数吗?那么有多个移动表示(例如iphone,mobile,palm)和完整的浏览器表示呢?
观点怎么样?在没有大量if语句或重复代码的情况下选择正确模板的惯例是什么.
如果要解决这个问题,我可能会做的是:
Accept
标题(我认为这就是您所说的内容),并根据Accept
标题决定要发回的内容类型.Accept
标头中.对于此解决方案,URL中的内容类型将始终表示为关联的文件扩展名,既不是查询字符串的一部分,也不是资源名称的一部分.但是除了浏览器生成的请求之外,内容类型应该通过Accept
标头进入.
所以请求来自:
GET /blogs/123.xml HTTP/1.1
Host: example.com
Run Code Online (Sandbox Code Playgroud)
中间件将其转换为:
GET /blogs/123 HTTP/1.1
Host: example.com
Accept: application/xml
Run Code Online (Sandbox Code Playgroud)
您的视图会查看application/xml
并返回包含XML内容的响应.