django - 内容类型和表示

标签 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,移动设备,Palm)和完整的浏览器代表怎么办?

    意见呢?在没有大量if语句或大量重复代码的情况下选择正确模板的惯例是什么?

    最佳答案

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

  • 您的 View 将查找Accept header (我认为您正在谈论的是该 header ),并根据Accept header 确定要发回的内容类型。
  • 您有一个中间件,该中间件在Request-URI中查找扩展名,将其删除,然后将关联的内容类型添加到请求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/

    相关文章:

    python - Django 和线程安全

    python - django/python 如何通过发布 json 连接到 Web 服务

    python - 是否有任何可能的方法来安排 postgresql 每日备份并将其推送到 AWS S3 存储桶中?

    javascript - Flatiron/director 中的可选参数

    python - 如何在 Flask 中创建友好的 url?

    python - Haystack 搜索一个非常短的字符字段

    html - 通过 URL 传递表单变量

    java - 仅获取响应代码而不是 url 的完整来源

    url - 哪些字符会中断双击突出显示

    php - URL 安全漏洞修复 '../'