2017-02-10 3 views
-1

Djangoは私のために新しく、私はカスタムjson応答が欲しいです。 私はAndroid App Retrofitを使ってサーバーからの応答を得ようとしています。サーバによる正確な応答 。私は私はdjangoを使ってカスタムjson形式を望みます

{ 
    "username": "admin", 
    "token": "xxx" 
} 

のようなJSON形式を得たが、私はJSON形式のデータを返す

responseCode{ 
    responseCode:xxx, 
    ResponseData: 
     {token:xxx,username:xxx} 
    } 

コード

class UserLoginSerializer(serializers.ModelSerializer): 
token = serializers.CharField(allow_blank = True , read_only = True) 
username = serializers.CharField(required = False , allow_blank=True) 
#email = serializers.EmailField(label="Email Adress",required = False, allow_blank=True) 
class Meta: 
    model = User 
    fields = [ 
     'username', 
     #'email', 
     'password', 
     'token', 



    ] 
    extra_kwargs ={"password": 
        {"write_only":True 
        } 
    } 
def validate(self, data): 
    user_obj = None 
    #email = data.get('email', None) 
    username = data.get("username", None) 
    password = data["password"] 
    if not username: 
      raise ValidationError("A username or email is required to login") 

    user=User.objects.filter(
      #Q(email=email)| 
      Q(username=username) 

     ).distinct() 
    #user = user.exclude(email=None) 
    if user.exists() and user.count() == 1 : 
     user_obj = user.first() 
    else: 
     raise ValidationError("username not valid.") 

    if user_obj: 
     if not user_obj.check_password(password): 
      raise ValidationError("Incorrect credentials please try again") 


    #token = Token.objects.get_or_create(user=user_obj) 
    token, created = Token.objects.get_or_create(user=user_obj) 

    data["token"] = token.key 
    data["username"] = user_obj 


    return data 
をしたいのおかげ

、JSON形式を一致させる必要が私を助けてください

私はこのようなものを試しました

# responseCode = {} 
# responseData = {} 

# responseData['token'] = token.key 
# responseData['username'] = user_obj 
# responseCode['responseData'] = responseData 
# data["responseCode"] = responseCode 

なく動作し、

答えて

0
responseCode{ 
    responseCode:xxx, 
    ResponseData: 
     {token:xxx,username:xxx} 
    } 

が有効なJSONファイルではありません、私を助けてください。

あなたはそのようにそれを取得する必要があります:

data["responseCode"]={ 
    "responseCode":"xxx", 
    "ResponseData": 
     { 
      token:token.key, 
      username:user_obj 
      } 
    } 

、その後、あなたがデータを呼び出すときには、有効なJSON形式が似ている

responseCode:{ 
    responseCode:xxx, 
    ResponseData: 
     {token:xxx,username:xxx} 
    } 
+0

感謝を持つことができ、私はそれがOKであれば – mayur

+0

をしようとします行う??? – obayhan

+0

その作業のように見える..私は何をし、働いていない – mayur

-1

返します。

{ 
    key1 : value1, 
    key2 : value2, 
} 

ネストされた値を持つこともできます。そう、ネストされた値は、あなたがこれを理解すれば、私たちは簡単にJSON形式で私たちの必要な値を翻訳することができ、今

{ 
    key1 : { 
       key_nested1 : value, 
       key_nested2 : value 
      }, 
    key2 : value 
} 

のように見えます。ですから、Pythonでは、コード内ですでに試したように辞書を使ってこの構造を作成します。

JSONFormat = {} #corresponds to empty json file 

#now we need to insert key value pairs 
JSONFormat["ResponseCode"]= "Fill your response code here" 

#this is how our json will look now 
#{ 
#  ResponseCode : "Fill your reponse code here" 
#} 

さて、ResponseDataは は、私たちはこれらの2つのことを行う必要があり、その値としてネストされた辞書を持っている

  1. キー「ResponseData」の値として、その辞書を取る辞書
  2. を作成

    ResponseDataValue = { }  #create the dictionary 
        ResponseDataValue["Token"] = "Your Token Here" 
        ResponseDataValue["Username"] = "Your User Name" 
    
        #now we take this value and place it against out json_format dict 
    
        JSONFormat["ResponseData"] = ResponseDataValue 
    
次のように10

はそう最終的にあなたが必要な形式の応答を

{ 
    ResponseCode :"Your Code", 
    ResponseData : { 
         Token : "Your Token", 
         Username : "the username" 
        } 
} 
関連する問題