我正在编辑Runwithfriends FB示例应用程序来构建我自己的一个。它运行得很好,我在这里和那里做了一些改变。我休息了大约两个星期,但是现在当我试图访问这个应用程序时,我得到了一个奇怪的python错误:
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\ROOT\app\主.py在init_facebook中(self=<;main.RecentRunHandler对象>;) 316用户编号=facebook.user_id,friends=朋友, 317访问令牌=facebook.access_令牌,name=me[u'name'], =>;318电子邮件=我。快(u'email'),picture=我[u'picture']) 319用户.put() 320键错误除外,例如:
<;。剪下部分。>
类'谷歌.appengine.api.数据存储_错误.BadValueError“>;:属性图片必须是str或unicode实例,而不是dict args=('属性图片必须是str或unicode实例,而不是dict',) message='属性图片必须是str或unicode实例,而不是dict'”
我知道这是一个非常普遍的错误,但它指向以下代码。这个代码一直在那里,我从来没有碰过它。我现在真的不知道还能去哪儿找——我已经搜遍了,但找不到任何线索。抱歉,如果这仍然是太宽泛,但如果你能告诉我,我可以提供什么其他信息来调试这个:-(
def init_facebook(self):
"""Sets up the request specific Facebook and User instance"""
facebook = Facebook()
user = None
# initial facebook request comes in as a POST with a signed_request
if u'signed_request' in self.request.POST:
facebook.load_signed_request(self.request.get('signed_request'))
# we reset the method to GET because a request from facebook with a
# signed_request uses POST for security reasons, despite it
# actually being a GET. in webapp causes loss of request.POST data.
self.request.method = u'GET'
self.set_cookie(
'u', facebook.user_cookie, datetime.timedelta(minutes=1440))
elif 'u' in self.request.cookies:
facebook.load_signed_request(self.request.cookies.get('u'))
# try to load or create a user object
if facebook.user_id:
user = User.get_by_key_name(facebook.user_id)
if user:
# update stored access_token
if facebook.access_token and \
facebook.access_token != user.access_token:
user.access_token = facebook.access_token
user.put()
# refresh data if we failed in doing so after a realtime ping
if user.dirty:
user.refresh_data()
# restore stored access_token if necessary
if not facebook.access_token:
facebook.access_token = user.access_token
if not user and facebook.access_token:
me = facebook.api(u'/me', {u'fields': _USER_FIELDS})
try:
friends = [user[u'id'] for user in me[u'friends'][u'data']]
user = User(key_name=facebook.user_id,
user_id=facebook.user_id, friends=friends,
access_token=facebook.access_token, name=me[u'name'],
email=me.get(u'email'), picture=me[u'picture'])
user.put()
except KeyError, ex:
pass # ignore if can't get the minimum fields
self.facebook = facebook
self.user = user
这是获取图片的方法:
可能与October 2012 Breaking Changes有关,引用:
因此,在当前使用
picture=me[u'picture']
的代码中,请尝试访问picture
字典的url
属性。(如果它有一个;我不能确定这是否适用,因为我不知道您的代码是否会被视为指定了回调属性)如果我的假设是正确的,那么您也可以按照路线图中的描述启用迁移;但这只会使您的应用程序在10月3日之前以旧方式工作,所以最好立即尝试修复它。在
相关问题 更多 >
编程相关推荐