【问题标题】:django-rest-framework accept JSON data?django-rest-framework 接受 JSON 数据?
【发布时间】:2015-09-15 11:13:10
【问题描述】:

我使用 创建了 RESTFul API。用户端点为:/api/v1/users

我想创建一个新用户,所以我以 JSON 格式发送用户数据:

{
    "username": "Test1",
    "email": "test1@gmail.com",
    "first_name": "Test1",
    "last_name": "Test2",
    "password":"12121212"
}

我正在使用 Google Chrome 扩展 Postman 来测试 API。但是,在发送请求后,用户数据并没有保存。响应包含此错误:

{
    "detail": "Unsupported media type \"text/plain;charset=UTF-8\" in request."
}

这是 Postman 中请求详细信息的样子:

【问题讨论】:

标签: django-rest-framework python django django-rest-framework


【解决方案1】:

您需要通过设置适当的标题来定义内容类型。如果是 Postman,您需要在 url 字段下设置以下值:

标题:“内容类型”

值:应用程序/json

【讨论】:

    【解决方案2】:

    您错过了在标题部分添加 Content-Type 标题。只需将 Content-Type 标头设置为 application/json 即可。

    见下图:

    此外,您可能还需要在标头中包含 CSRF 令牌,以防在使用 Postman 发出 POST 请求时收到错误 {"detail": "CSRF Failed: CSRF token missing or incorrect."}。在这种情况下,添加一个 X-CSRFToken 标头,其值也作为 CSRF 令牌值。

    【讨论】:

      【解决方案3】:

      你需要做两步来完成这个问题:

      1. 添加带有application/json 值的Content-Type 标头
      2. 添加带有Token {YOUR_CUSTOM_TOKEN}值的Authorization标头以传递CSRFToken

      注意:如果你想通过 session 进行身份验证,你不需要做第二步,但是如果你想在移动端使用这个 API,你必须将 Authorization 标头传递给服务器

      希望对你有帮助

      【讨论】:

        【解决方案4】:

        如果有人遇到像我这样的问题,我会发布这个答案。

        我正在使用 Angular 2 和由 Django Rest Framework 制作的 API 开发前端应用程序,并且我曾经发送带有以下标头的请求:

        'Content-Type': 'application/json'
        

        它运行良好,直到我在 Fire Fox 上尝试了它,但我无法加载所需的数据,我通过添加以下标题解决了它

        'Content-Type': 'application/json',
        'Accept': 'application/json'
        

        这里有一个解释,Content-Type 告诉服务器数据的内容类型是什么,而Accept 告诉它客户端将接受什么内容类型。

        这里有一个关于这个问题的很好的明确答案:

        https://webmasters.stackexchange.com/questions/31212/difference-between-the-accept-and-content-type-http-headers

        【讨论】:

          【解决方案5】:

          我必须添加以下内容才能使其正常工作(我正在使用来自客户端的 node-fetch btw 进行 POST):

          supportHeaderParams: true,
          headers: { "Content-Type": "application/json; charset=UTF-8" },
          

          【讨论】:

            猜你喜欢
            • 2016-12-07
            • 2021-08-03
            • 2016-06-26
            • 2020-03-19
            • 1970-01-01
            • 2014-04-13
            • 1970-01-01
            • 1970-01-01
            • 2019-09-15
            相关资源
            最近更新 更多