14198


Djangoを用いてWebアプリを作成しているのですが、Python-social-
authを用いてTwitterでログインし、Pipelineという機能を使ってレスポンスをインターセプトしてユーザのプロファイル登録をしようとしているのですが、以下のコードでresponseの要素を参照したところ、`'tuple'
object has no attribute 'description'`というエラーがでてできません。

コード

[code]

    def save_profile(backend, user, response, *args, **kwargs):
        #Twitterの場合
        if backend.name == 'twitter':
            profile = user.get_profile()
            if profile is None:
                profile = Profile(user=user)
            print(response)
            print(response.keys())
            profile.description = response['description']
            profile.name = response.get('name')
            profile.lang = response.get('lang')
            profile.location = response.get('location')
            profile.twitterUrl = response.get('url')
            profile.save()
    
[/code]

get()を使っても、[]を使っても同じエラーが出ます。

responseは正常に取得出来ていて、キーは以下のようになっています。

Key

[code]

    dict_keys(['profile_use_background_image', 'screen_name', 'follow_request_sent', 'is_translator', 'listed_count', 'utc_offset', 'profile_text_color', 'geo_enabled', 'has_extended_profile', 'favourites_count', 'profile_background_image_url', 'friends_count', 'profile_background_image_url_https', 'statuses_count', 'profile_background_tile', 'created_at', 'description', 'profile_image_url', 'notifications', 'status', 'profile_sidebar_border_color', 'following', 'url', 'protected', 'time_zone', 'default_profile', 'profile_background_color', 'profile_image_url_https', 'id_str', 'lang', 'followers_count', 'id', 'profile_banner_url', 'profile_link_color', 'entities', 'profile_sidebar_fill_color', 'access_token', 'contributors_enabled', 'verified', 'default_profile_image', 'location', 'is_translation_enabled', 'name'])
    
[/code]

どのようにresponseの要素を参照すればいいのでしょうか

追記

Profileモデル

[code]

    class Profile(models.Model):
        name = models.CharField(verbose_name="Name", max_length=255, unique=True)
        icon = models.URLField(verbose_name="icon")
        registerDate = models.DateTimeField(auto_now_add=True)
        refreshDate = models.DateTimeField(auto_now=True)
        user = models.OneToOneField(settings.AUTH_USER_MODEL, verbose_name="The user of this profile.")
        lang = models.CharField(verbose_name="Language", max_length=255, null=True)
        description = models.TextField(verbose_name="description", null=True)
        twitterUrl = models.URLField(verbose_name="Twitter account URL", null=True)
        location = models.CharField(verbose_name="Location", max_length=255, null=True)
    
[/code]

このサイトを参考にしております。  
サイトURL:<http://psa.matiasaguirre.net/docs/pipeline.html#authentication-
pipeline>


CC BY-SA 3.0
2015-08-07T07:30:40.670
13133
2015-08-09T08:00:25.797
2015-08-07T09:20:20.580
7232
7232
question
python django
Pythonの辞書型を参照できない


解決しました。

get_profile()を独自実装していたのですが、これが間違っていました。  
そこでprofile = user.get_profile()ではなくprofile = user.profileで参照しました。


CC BY-SA 3.0
2015-08-09T04:49:54.883
14198
2015-08-09T08:00:25.797
2015-08-09T08:00:25.797
7232
7232
13133
answer