def get(self):
        service = douban_service()
        key, secret = service.client.get_request_token()

        user = users.get_current_user()
        new_account = DoubanAccount.create_unauthorized_account(user, key, secret)

        callback_url = 'http://%s/account/douban/authorize/complete/' % self.request.host
        auth_url = service.client.get_authorization_url(key, secret, callback_url)
        return self.redirect(auth_url)
    def get_by_douban_id(cls, douban_id):
        """
        按豆瓣 ID 获取用户档案
        如果超过了缓存的有效时限,更新档案

        """
        profile = cls.all().filter('douban_id = ', douban_id).get()
        if profile and profile.need_update():
            service = douban_service()
            # GData 不太支持 Unicode
            entry = service.GetPeople('/people/%s' % \
                                      douban_id.encode('utf-8'))
            profile.update(entry)
        return profile
    def get(self, template_name='templates/authdouban/complete.html'):
        request_key = self.request.get('oauth_token')
        account = DoubanAccount.all().filter('request_key = ', request_key).get()

        if not account or account.request_key == 'ALREADY_AUTHENTICATED':
            reason = urllib.quote_plus('Request Key 不正确')
            return self.redirect('/account/douban/authorize/failure/?reason=%s' % reason)

        service = douban_service()
        key, secret, douban_id = service.client.get_access_token(account.request_key, account.request_secret)
        if key and secret and douban_id:
            account.set_access_key(key, secret, douban_id)
            account.remove_duplicate_accounts()
            account.remove_old_accounts()
            if settings.STORE_DOUBAN_PROFILE:
                entry = service.GetPeople('/people/%s' % douban_id)
                profile = DoubanProfile.insert_or_update(entry)
            return render_to_response(self, template_name, { 'douban_account': account })
        else:
            reason = urllib.quote_plus('获取 Access Key 失败')
            return self.redirect('/account/douban/authorize/failure/?reason=%s' % reason)