我正在使用 Fandjango 并尝试访问 Facebook 用户的 relationship_status 和 Significant_other.name,但它找不到这些属性。我的代码:
from django.shortcuts import render
from quiz.models import Quiz, Question
from django.http import HttpResponse
from fandjango.decorators import facebook_authorization_required
@facebook_authorization_required(permissions=['user_activities', 'user_hometown', 'user_interests', 'user_location', 'user_relationship_details', 'user_events', 'friends_relationships'])
def home(request):
user = request.facebook.user
print dir(user)
context = {
'user': user,
}
return render(request, 'quiz/home.html', context)
我一直在从https://developers.facebook.com/docs/graph-api/reference/user/打印出所有 Facebook 属性的列表,以跟踪哪些有效,哪些无效:
<ul>
<li>ID: {{user.id}}</li>
<li>Link: {{user.link}}</li>
<li>First Name: {{user.first_name}}</li>
<li>Quotes: {{user.quotes}}</li>
<li>Name: {{user.name}}</li>
<li>Hometown: {{user.hometown}}</li>
<li>Bio: {{user.bio}}</li>
<li>Religion: {{user.religion}}</li>
<li>Middle Name: {{user.middle_name}}</li>
<li>About: {{user.about}}</li>
<li>Verified: {{user.is_verified}}</li>
<li>Gender: {{user.gender}}</li>
<li>Third-party: {{user.third_party_id}}</li>
<li>Relationship-status: {{user.relationship_status}}</li>
<li>Last-name: {{user.last_name}}</li>
<li>Locale: {{user.locale}}</li>
<li>Verified: {{user.verified}}</li>
<li>Political: {{user.political}}</li>
<li>Name-format: {{user.name_format}}</li>
<li>Sig Other: {{user.significant_other}}</li>
<li>Website: {{user.website}}</li>
<li>Location: {{user.location}}</li>
<li>Username: {{user.username}}</li>
</ul>
这只会产生 ID、中间名、性别、姓氏和语言环境。似乎很清楚我只获得了公共个人资料属性,但不知道如何访问其余部分。
为了弄清楚我可以访问哪些属性,我运行了 dir(user) 命令,结果如下:
['DoesNotExist', 'MultipleObjectsReturned', '__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__getattribute__', '__hash__', '__init__', u'__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__unicode__', '__weakref__', '_base_manager', '_default_manager', '_deferred', '_do_insert', '_do_update', '_get_FIELD_display', '_get_next_or_previous_by_FIELD', '_get_next_or_previous_in_order', '_get_pk_val', '_get_unique_checks', '_meta', '_oauth_token_cache', '_perform_date_checks', '_perform_unique_checks', '_save_parents', '_save_table', '_set_pk_val', '_state', 'answer_set', 'authorized', 'birthday', 'clean', 'clean_fields', 'created_at', 'date_error_message', 'delete', 'email', 'extra_data', 'facebook_id', 'facebook_username', 'first_name', 'full_clean', 'full_name', 'gender', 'get_next_by_created_at', 'get_next_by_last_seen_at', 'get_previous_by_created_at', 'get_previous_by_last_seen_at', 'graph', 'id', 'last_name', 'last_seen_at', 'locale', 'middle_name', 'oauth_token', 'oauth_token_id', 'objects', 'permissions', 'picture', 'pk', 'prepare_database_save', 'save', 'save_base', 'serializable_value', 'synchronize', 'unique_error_message', 'validate_unique']
显然,这显示了那些正在工作的,并且没有列出那些不工作的。
我觉得我在访问非公开个人资料属性方面遗漏了一些非常明显的东西,但真的不知道它是什么。
编辑:在做了更多研究之后,我开始认为我需要将用户的 auth_token 传递给图形 API 以获得我想要的所有属性,但不确定如何在 Fandjango 框架中这样做。这是我的第一次尝试,但它返回“Graph API object is not callable”:
oauth = request.facebook.user.oauth_token
user = request.facebook.user
facebook_graph = user.graph(oauth)