当'body‘部分填入适当的参数时,对Django Rest API框架的post请求通过Postman工作。但这不适用于以下JavaScript代码:
var data = {emp_id:50,emp_name:'test',password:'pass123'};
fetch('http://127.0.0.1:8000/signup/',{
method:"POST",
body: JSON.stringify(data),
mode:"no-cors",
headers: {
"Content-Type": "application/json",
// "Content-Type": "application/x-www-form-urlencoded",
},
})
.then(response => response.json());
下面是在REST-API的views.py中处理POST请求的def:
@api_view(['GET', 'POST', ])
def signup(request):
serializer = employeeSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
我是个新手,谁能告诉我为什么JavaScript代码不能工作?
编辑:浏览器控制台显示的错误为:
POST http://127.0.0.1:8000/signup/ 415 (Unsupported Media Type)
发布于 2019-02-22 16:32:47
问题是,通过使用no-cors
模式,您只能使用simple requests,反过来,除了application/x-www-form-urlencoded
、multipart/form-data
或text/plain
之外,它不能具有其他内容类型。实际上,如果您查看浏览器随请求发送的头文件,您将看到内容类型从application/json
更改为text/plain
-因此出现了错误。
解决您的问题:删除no-cors
模式,并在您的django应用程序中向响应添加cors标头。为此,您可以使用django-cors-headers。
而且,您对postman没有任何问题,因为它不关心same-origin policy。
发布于 2019-02-22 13:11:44
尝试将标头更改为
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
accept标头用于确定在响应中将数据发送回客户端的格式,猜测可能需要该格式
https://stackoverflow.com/questions/54826978
复制相似问题