我正在尝试向我的restapi发送一个JSON,使用Django Rest Framework构建,并且每当我发送此请求时都会收到错误消息,因为另一个ajax调用具有相同的结构。无论我采取什么样的观点,我都会遇到同样的错误。
我很确定问题出在ajax配置或创建json数据的javascript上,因为当我通过“高级REST客户端”发送json时,问题就出现了。甚至通过使用Xamarin Forms的应用程序构建,响应为200。
function createJson( email, pass){
tmpObj = {"Email": email, "Pass": pass};
json_result = JSON.stringify(tmpObj);
return json_result;
}
function sendLogin(){
var jsonData = createJson(State.email, State.pass);
console.log(jsonData)
$.ajax({
type: 'POST',
dataType: 'json',
contentType: 'application/json',
url: '/restapi/usuarios/login/',
data: jsonData,
processData: false ,
success: function(json) {
console.log(json);
State = json;
first_name = getFirstName(State.Nome)
title = "Login";
msg_html = "Bemvindo, <b>" + first_name + "</b>.";
modal = createModal(title, msg_html);
},
// handle a non-successful response
error : function(xhr,errmsg,err) {
var msg = "Oops! We have encountered an error: "+errmsg;
console.log(msg);
console.log(xhr.status + ": " + xhr.responseText);
setState({sent: 'error', result: err, email: ''});
}
});
}
在服务器端:
@api_view(['POST'])
def UsuarioLogin(request):
data = JSONParser().parse(request)
if all(credencial in data for credencial in ('Email', 'Pass')):
q = User.objects.filter(email=data['Email'])
if q.count() == 1:
username = q.get().username
password = data['Pass']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
usuario = q.get()
payload = UserSerializer(usuario, many=False)
return JsonResponse(payload.data, status=status.HTTP_200_OK, safe=False)
else:
return JsonResponse({"Mensagem": "Senha ou email incorretos"}, status=status.HTTP_401_UNAUTHORIZED, safe=False)
else:
return JsonResponse({"Mensagem": "Usuário não cadastrado"}, status=status.HTTP_404_NOT_FOUND, safe=False)
else:
return JsonResponse({"Mensagem": "Nem todos os campos foram informados"}, status=status.HTTP_400_BAD_REQUEST,
safe=False)
浏览器上的错误消息是:
400: {"detail":"JSON parse error - Expecting value: line 1 column 1 (char 0)"}
答案 0 :(得分:0)
您只需访问request.data
即可访问数据。