哪个Django库用于Facebook Graph API?

时间:2010-11-23 04:08:36

标签: django facebook facebook-graph-api

我目前正在Django中开发一个应用程序,并试图实现Facebook身份验证和对Graph API的请求。我已经看到了一些不同的库,但是执行以下操作的最佳方法是什么:

  1. 让用户通过Facebook登录。
  2. Django为他们创建了一个新用户,并添加了他们的uid和oauth令牌。
  3. 然后我可以使用Facebook的Python SDK调用Graph API。
  4. 我确实看到了this example。在正常的Django上这么简单吗?

3 个答案:

答案 0 :(得分:2)

我的公司已经建立了一个库,可以将Facebook整合到您的Django应用程序中(我们可能已经使用该库构建了10-20个应用程序,包括一些具有大量流量的应用程序,因此它已经过战斗测试)。 / p>

pip install ecl-facebook==1.2.7

在您的设置中,为FACEBOOK_KEYFACEBOOK_SECRETFACEBOOK_SCOPEFACEBOOK_REDIRECT_URLPRIMARY_USER_MODEL添加值。您还需要将ecl_facebook.backends.FacebookAuthBackend添加到AUTHENTICATION_BACKENDS。例如,在 settings.py

# These aren't actual keys, you'll have to replace them with your own :)
FACEBOOK_KEY = "256064624431781"
FACEBOOK_SECRET = "4925935cb93e3446eff851ddaf5fad07"
FACEBOOK_REDIRECT_URL = "http://example.com/oauth/complete"
FACEBOOK_SCOPE = "email"

# The user model where the Facebook credentials will be stored
PRIMARY_USER_MODEL = "app.User"

AUTHENTICATION_BACKENDS = (
    # ...
    'ecl_facebook.backends.FacebookAuthBackend',
)

views.py 中添加一些视图,以处理身份验证前后的逻辑。

from django.contrib.auth import authenticate, login
from django.http import HttpResponseRedirect

from ecl_facebook.django_decorators import facebook_begin, facebook_callback
from ecl_facebook import Facebook

from .models import User

# ...

@facebook_begin
def oauth_facebook_begin(request):
    # Anything you want to do before sending the user off to Facebook
    # for authorization can be done here.
    pass

@facebook_callback
def oauth_facebook_complete(request, access_token, error):
    if error is None:
        facebook = Facebook(token)
        fbuser = facebook.me()
        user, _ = User.objects.get_or_create(facebook_id=fbuser.id, defaults={
            'access_token': access_token})
        user = authenticate(id=user.id)
        login(request, user)
        return HttpResponseRedirect("/")
    else:
        # Error is of type ecl_facebook.facebook.FacebookError. We pass
        # the error back to the callback so that you can handle it
        # however you want.
        pass

现在只需将这些网址连接到您的 urls.py 文件中即可。

# ...

urlpatterns = patterns('app.views',
    # ...
    url(r'^oauth/facebook/begin$', 'oauth_facebook_begin'),
    url(r'^oauth/facebook/complete$', 'oauth_facebook_complete'),
)

希望这有帮助!

P.S。您可以阅读其余文档here

答案 1 :(得分:1)

我们在工作的地方做了很多Facebook应用程序开发,所以我们开发了an open-source library,这使得它的一切变得非常简单。

from django.http import HttpResponse
from fandjango.decorators import facebook_authorization_required

@facebook_authorization_required
def foo(request, *args, **kwargs):
    return HttpResponse("Your name is %s" % request.facebook_user.first_name)

答案 2 :(得分:0)

我建议https://github.com/egnity/fb.py。立即启动并运行基于Django的Facebook应用程序。它包含一个中间件,允许您在视图中运行这样的代码:

表示用户ID:

user_id = request.facebook.graph().get_object("me")['id']

表示oauth令牌:

user_token = request.facebook.auth_token

然后,您可以根据需要将上述内容添加到您的用户模型中。要进行Graph API调用,您仍然可以使用fb.py的中间件 - 无需使用原始python-sdk。上面的user_id代码是Graph API调用的完美示例。你可以用fb.py做更多的事情。下载包括一个示例django项目,以帮助您前进。