Pyfacebook + Google App Engine: не могу найти новые функции в facebook.py
-
24-10-2019 - |
Вопрос
Я пытаюсь использовать функции Pyfacebook (https://github.com/sciyoshi/pyfacebook/) в проекте Google App Engine. Я последовал советам на форуме разработчиков Facebook (http://forum.developers.facebook.net/viewtopic.php?pid=164613) и добавил дополнительные функции в файл __init__.py, скопировал этот файл в корне. каталог моего проекта и переименован в его facebook.py. Импортировав Facebook.py, я добавил следующее в метод Get (Self) для класса Python для страницы:
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))
При его запуске я получаю следующую ошибку:
Файл " много baw08u private ids halloworld helloworld.py", строка 54, в Get
Если не facebookapi.check_connect_session (self.request): attributeError: «Facebook». Объект нет атрибута 'check_connect_session'
Таким образом, кажется, это хорошо загружает API Facebook, но не новые методы, которые я добавил. Я скопировал и вставил код с форума разработчиков в нижней части определения класса Facebook и убедился, что все отступление было правильным, но он все еще не поднимает их. Кто -нибудь знает, в чем может быть проблема?
Спасибо
Бен
Решение
Вы верите 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 обновляет их код, вы просто копируете новый файл на место - не нужно объединять свои настройки.