django-rest-framework接受JSON数据?

Eli*_*isa 22 python django django-rest-framework

我使用django-rest-framework创建了RESTFul API.用户端点是

/api/v1/users
Run Code Online (Sandbox Code Playgroud)

我想创建新用户.我以JSOn格式发送用户数据.

{
    "username": "Test1",
    "email": "test1@gmail.com",
    "first_name": "Test1",
    "last_name": "Test2",
    "password":"12121212"
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Chrome扩展程序Postman来测试api.但用户数据尚未保存.回应是:

{
    "detail": "Unsupported media type \"text/plain;charset=UTF-8\" in request."
}
Run Code Online (Sandbox Code Playgroud)

附上截图 在此输入图像描述

Rah*_*pta 40

您错过了Content-Type在标题部分添加标题.只需将Content-Type标题设置为application/json,它应该工作.

见下图:

邮差

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


Moe*_*Far 6

您需要执行两个步骤来完成此问题:

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

注意:如果要对会话进行身份验证,则无需执行第二步,但如果要将此API用于移动设备,则必须将Authorization标头传递给服务器

我希望它有所帮助


Kha*_*ari 5

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

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

'Content-Type': 'application/json'
Run Code Online (Sandbox Code Playgroud)

直到我在Fire Fox上尝试了它并且无法加载所需的数据,并通过添加以下标头解决了该问题后

'Content-Type': 'application/json',
'Accept': 'application/json'
Run Code Online (Sandbox Code Playgroud)

这是一个解释,Content-Type告诉服务器数据的内容类型是什么,而告诉服务器Accept客户端将支持哪种内容类型。

关于此问题,这是一个很好的明确答案:

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