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)