2017-01-22 9 views
0

私はDjangoのコードに対応する以下のフォーマットこのJSONをdjangoで解析するには?

$.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); 
    } 
}); 

にデータを送信しています:

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") 

で、端末

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

私の質問は かをsubstringingこのバイパスを解析する任意の簡単な方法がありますJSONをajaxで送信するときに何か間違っていますか?

+1

Try * data = request.data * * QueryDict(data).get( 'user')* – wencakisa

答えて

0

jQueryに与えたデータをJSON.stringify()にする必要はありません。そのため、「double-JSON」が得られます。例を参照してください。

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

この形式は私にを与えています。 – Sayok88

+0

@ Sayok88おそらく、あなたは 'processData:false'フラグを削除しませんでしたか? – makaveli

+0

いいえ、私はdidntです。ケーキの仲間のような作品。たくさんのこと。 – Sayok88

0

あなただけのデータを取得したい場合:

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

あなたはすでにJSONデータを送信するので、これは動作するはずです。