【问题标题】:Which Django library to use for Facebook Graph API?Facebook Graph API 使用哪个 Django 库?
【发布时间】:2011-05-14 06:05:42
【问题描述】:

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

  1. 有一个用户通过 Facebook 登录。
  2. Django 为他们创建一个新用户并添加他们的 uid 和 oauth 令牌。
  3. 然后我可以使用 Facebook 的 Python SDK 调用 Graph API。

我确实看到了this example。在普通的 Django 上就这么简单吗?

【问题讨论】:

    标签: django facebook facebook-graph-api


    【解决方案1】:

    我推荐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 项目,可帮助您开始。

    【讨论】:

    【解决方案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)
    

    【讨论】:

      【解决方案3】:

      我的公司已经构建了一个库,可以将 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-16
        • 2017-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多