2017-01-22 1 views
0

Ich sende Daten in das unten stehende FormatWie kann man diesen JSON im Django analysieren?

$.ajax({ 
    url: "http://localhost:8000/loginrest/", 
    data: JSON.stringify({'user':'admin','password':'zyz'}), 
    processData: false, 
    type: 'POST', 
    error: function(xhr, error){ 
    console.debug(xhr); console.debug(error); 
}, 
    success: function(data){ 
     alert(data); 
    } 
}); 

django-Code entspricht:

class LoginView(APIView): 


def get(self, request, format=None): 
    return Response({'detail': "GET Response"}) 

def post(self, request, format=None): 

    try: 
     data = request.DATA 
    except ParseError as error: 
     return Response(
      'Invalid JSON - {0}'.format(error.detail), 
      status=status.HTTP_400_BAD_REQUEST 
     ) 
    print(data) 
    print(request.POST) 
    try: 
     print(QueryDict(request.body).get('user')) 
    except: 
     print("error") 

in Terminal

<QueryDict: {u'{"user":"admin","password":"zyz"}': [u'']}> 
<QueryDict: {u'{"user":"admin","password":"zyz"}': [u'']}> 
error 

Meine Frage ist es eine einfache Möglichkeit, diese Umgehen Parsen substringing oder mache ich etwas falsch beim Senden der JSON in Ajax?

+1

Versuchen Sie * data = request.data *. Dann * QueryDict (Daten) .get ('Benutzer') * – wencakisa

Antwort

0

Sie müssen nicht JSON.stringify() die Daten, die Sie an jQuery geben, deshalb erhalten Sie die "Doppel-JSON". Siehe Beispiel:

var postDataSth = JSON.stringify({asd: 123}); 

$.ajax({ 
    url: 'http://url.com', 
    method: 'POST', 
    data: { 
     data1: postDataSth, 
     data2: 'KILLER_QUEEN', 
     foo: 'bar' 
    }, 
    success: function (foo) { 
     if (foo) { 
      console.log(foo.bar); 
     } 
    }, 
    error: function() { 
     console.warn('request failed!'); 
    } 
}); 
+0

Dieses Format gibt mir und ich habe keine Ahnung, es zu analysieren. – Sayok88

+0

@ Sayok88 Vielleicht hast du das Flag 'processData: false' nicht entfernt? – makaveli

+0

nein ich habe nicht. Funktioniert wie ein Stück Kuchen. Thans viel. – Sayok88

0

Wenn Sie wollen einfach nur Daten erhalten:

data = json.loads(request.data) 
user = data['user'] 

Sie bereits json Daten senden, arbeiten sollte dies so.

Verwandte Themen