首页 文章

哪个Django库用于Facebook Graph API?

提问于
浏览
1

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

  • 让用户通过Facebook登录 .

  • Django为他们创建了一个新用户并添加了他们的uid和oauth令牌 .

  • 然后我可以使用Facebook的Python SDK调用Graph API .

我确实看到了this example . 在正常的Django上这么简单吗?

3 回答

  • 1

    我的公司已经 Build 了一个库,使得将Facebook集成到您的Django应用程序中很简单(我们可能已经使用库构建了10-20个应用程序,包括一些具有大量流量的应用程序,因此它经过了战斗测试) .

    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
    

    现在只需将这些URL连接到urls.py文件中即可 .

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

    希望这可以帮助!

    附:您可以阅读其余文档here .

  • 2

    我在我工作的地方做了很多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)
    
  • 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项目,以帮助您前进 .

相关问题