2016-04-24 49 views
0

我正在使用Django 1.9.5,并且与python社交身份验证提供的数据有问题。我得到了这些数据,但我无法'访问它。这是我的代码无法访问python社交身份验证的数据

def save_auth_data_session(request): 
    if request.user: 
     twitter = request.user.social_auth.get(provider ='twitter') 
     print twitter.extra_data['access_token'] 

如果我做了一个 “打印瓦尔特(Twitter)” 的终端给了我这个错误

""TypeError: string indices must be integers"" 

,这个数据我得到

{'user_id': 123, 'uid': u'2413671427750', '_user_cache': <User: quintana>, '_state': <django.db.models.base.ModelState object at 0x7fa3d86fc2d0>, 'provider': u'twitter', 'extra_data': u'{"access_token": {"oauth_token_secret": "Afkasdasdas21zxbxcbn", "oauth_token": "2468cxcpqsldkenI56", "x_auth_expires": "0", "user_id": "455793463", "screen_name": "puertoRico"}, "id": 455793463}', 'id': 123} 

回答

0

正如我可从print vars(twitter)的输出中看到 - extra_data存储序列化字典(字符串)'extra_data': u'{...}'

所以你需要首先反序列化它。

import json 

twitter = request.user.social_auth.get(provider ='twitter') 
extra_data = json.loads(twitter.extra_data) # will give you a python dictionary 
print extra_data['access_token'] 
+0

这完全工作,谢谢你的人! 。不知道它是序列化的,我是新的django – hreluz

+0

它是基本的python东西没有真正与django有关。请注意extra_data声明中的引号。 – crash843