Python 2.7 Webpy和Facebook图形API

Python 2.7 Webpy和Facebook图形API,python-2.7,web.py,Python 2.7,Web.py,我正在编写一个简单的python web服务,以从Facebook Graph API中获取内容。现在,在测试时,我已经在一个python类中编写了所有内容,并且工作得很好。现在,我已经开始模块化一切,一切都崩溃了 我正在使用webpy实现我的RESTful服务。我的代码看起来有点像这样: webapp.py FBModule.py 问题是,如果我使用一个单独的模块从Facebook获取访问令牌,我会得到一个损坏的内容错误。但是如果我做一些简单的事情,比如剪切和粘贴从FBModule的登录函数到

我正在编写一个简单的python web服务,以从Facebook Graph API中获取内容。现在,在测试时,我已经在一个python类中编写了所有内容,并且工作得很好。现在,我已经开始模块化一切,一切都崩溃了

我正在使用webpy实现我的RESTful服务。我的代码看起来有点像这样:

webapp.py

FBModule.py

问题是,如果我使用一个单独的模块从Facebook获取访问令牌,我会得到一个损坏的内容错误。但是如果我做一些简单的事情,比如剪切和粘贴从FBModule的登录函数到LoginHandler类的GET函数的所有内容,那么所有内容都会再次变得非常棒。我绞尽脑汁想找出我在这里做错了什么

如果你知道我做错了什么,请告诉我

Regds,
帕里托什

我得到了答案:我一次尝试重定向浏览器的次数太多了。我将return web.seeother“/”从LoginHandler的GET函数移到了login函数,它成功了。
import web
import FBModule

fb = FBModule.FBManager()

urls = (
    '/', 'HomeHandler',
    '/auth/login', 'LoginHandler',
    '/auth/logout', 'LogoutHandler'
)

class BaseHandler():
        def current_user(self):
            if not hasattr(self, "_current_user"):
                    self._current_user = dict()
                    user_id = web.cookies().get('fb_userid')
                    user_name = web.cookies().get('fb_username')
                    if user_id and user_name:
                        self._current_user = {'id': user_id, 'name': user_name}
            return self._current_user

class HomeHandler(BaseHandler):
        def GET(self):
            return render.oauth(current_user=self.current_user())


class LoginHandler:
    def GET(self):
        fb.login()      
        return web.seeother('/')

class LogoutHandler():
        def GET(self):
            fb.logout()
            web.seeother('/')

if __name__ == "__main__":
        app = web.application(urls, globals())
        app.run()
import urllib
import urlparse
import time
import web

FACEBOOK_APP_ID = "<APP ID>"
FACEBOOK_APP_SECRET = "<APP SECRET>"

def path_url():
    return "http://localhost:8080" + web.ctx.fullpath

class FBManager:
    def login(self):
        data = web.input(code=None)
        args = dict(client_id=FACEBOOK_APP_ID, redirect_uri=path_url())
        if data.code is None:
            return web.seeother('http://www.facebook.com/dialog/oauth?' + urllib.urlencode(args) + '&scope=' + urllib.quote('user_likes,friends_likes,user_birthday,friends_birthday'))
        args['code'] = data.code
        args['client_secret'] = FACEBOOK_APP_SECRET

        response = urlparse.parse_qs(urllib.urlopen("https://graph.facebook.com/oauth/access_token?" + urllib.urlencode(args)).read())
        access_token = response["access_token"][-1]
        profile = json.load(urllib.urlopen("https://graph.facebook.com/me?fields=id,name,birthday,location,gender&" + urllib.urlencode(dict(access_token=access_token))))
        web.setcookie('fb_userid', str(profile['id']), expires=time.time() + 7 * 86400)
        web.setcookie('fb_username', str(profile['name']), expires=time.time() + 7 * 86400)

    def logout(self):
        web.setcookie('fb_userid', '', expires=time.time() - 86400)
            web.setcookie('fb_username', '', expires=time.time() - 86400)