pyfacebook + Google App Engine:在facebook.py中找不到新功能

时间:2011-01-26 15:24:24

标签: python google-app-engine facebook pyfacebook

我正在尝试在Google应用引擎项目中使用pyfacebook函数(https://github.com/sciyoshi/pyfacebook/)。我已经按照Facebook开发者论坛(http://forum.developers.facebook.net/viewtopic.php?pid=164613)上的建议,将附加功能添加到__init__.py文件中,将该文件复制到根目录我的项目目录并将其重命名为facebook.py。导入facebook.py后,我将以下内容添加到页面的Python类的get(self)方法中:

facebookapi = facebook.Facebook(API_KEY, SECRET)

    if not facebookapi.check_connect_session(self.request):
        path = os.path.join(os.path.dirname(__file__), 'templates/login.html')
        self.response.out.write(template.render(path, {'apikey': API_KEY}))
        return

    user = facebookapi.users.getInfo(
        [facebookapi.uid],
        ['uid', 'name', 'birthday', 'relationship_status'])[0]

    template_values = {
        'name': user['name'],
        'birthday': user['birthday'],
        'relationship_status': user['relationship_status'],
        'uid': user['uid'],
        'apikey': API_KEY
    }

    path = os.path.join(os.path.dirname(__file__), 'templates/index.html')
    self.response.out.write(template.render(path, template_values))

运行时我收到以下错误:

  

文件“\ much \ baw08u \ Private \ IDS \ helloworld \ helloworld.py”,第54行,获取

     

如果不是facebookapi.check_connect_session(self.request):    AttributeError:'Facebook'对象没有属性'check_connect_session'

所以它似乎正在加载facebook API,但不是我添加的新方法。我从Facebook类定义的底部复制并粘贴了开发人员论坛中的代码,并确保所有缩进都是正确的,但它似乎仍然没有找到它们。有谁知道可能是什么问题?

由于

1 个答案:

答案 0 :(得分:2)

您认为Facebook类有一定的方法,但Python确信它没有。为什么?也许你拼错了方法名称,也许你没有得到正确的缩进 - 很难说没有看到代码。

您可以尝试一下来验证您的假设:

import facebook
import logging

logging.warn('Facebook class: %r', dir(facebook.Facebook))
logging.warn('facebook module: %r', dir(facebook))

如果您确定要使用正确的文件,那么您应该将check_connect_session视为Facebook的一种方法。如果你没有添加足够的缩进,那么你希望看到check_connect_method作为facebook模块中定义的函数。太多的缩进会使check_connect_method成为一个子函数,其中任何一个方法都在它之前,并且它不会出现在上面的日志记录中。密切注意缩进。

但是,添加一些自定义方法的更好方法可能是:

import facebook

class Facebook(facebook.Facebook):
    def check_connect_session(request):
        pass

facebookapi = Facebook(API_KEY, SECRET)

if not facebookapi.check_connect_session(...):
    ...

现在,当Facebook更新他们的代码时,您只需将新文件复制到位 - 无需合并您的自定义。