【问题标题】:Content-Type and Representations内容类型和表示
【发布时间】:2009-10-14 00:57:05
【问题描述】:

在 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 语句或大量重复代码的情况下选择正确模板的惯例是什么。

【问题讨论】:

    标签: django url url-routing content-type


    【解决方案1】:

    如果这能解决,我可能会做的是:

    • 您的视图会查找 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 内容的响应。

    【讨论】:

    • 整洁(和+1) - 但你能提供一些示例视图代码吗?根据内容类型,这不会有很多开关乱扔您的视图代码的风险吗?我无法立即想到一个优雅的解决方法,但我很想看看其他人是否可以。
    猜你喜欢
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2017-01-11
    • 2014-08-08
    相关资源
    最近更新 更多