Django轻松整合Facebook。
ecl_facebook的Python项目详细描述
ECL脸谱网
ECL Facebook是Python2.7+的Facebook库。它使facebook api成为 很好用,并且内置了Django和Flask的集成。
如果有问题需要报告或功能请求,请将其添加到 https://github.com/elmcitylabs/ECL-Facebook/issues
配置
如果您想使用ECL Facebook作为独立应用程序(例如 你写的脚本是为了下载你的tweets),你需要设置 环境变量FACEBOOK_KEY,FACEBOOK_SECRET, FACEBOOK_REDIRECT_URL,和FACEBOOK_SCOPE具有适当的值 你的Facebook应用程序。
export FACEBOOK_KEY="256064624431781" export FACEBOOK_SECRET="4925935cb93e3446eff851ddaf5fad07" export FACEBOOK_REDIRECT_URL="http://example.com/oauth/complete" export FACEBOOK_SCOPE="email"
如果您只对与django集成感兴趣,请阅读下面的部分。
身份验证
我们已经使身份验证变得非常简单。老实说,可能太简单了。
>>> from ecl_facebook.settings import DIALOG_URL >>> DIALOG_URL https://www.facebook.com/dialog/oauth?scope=email&redirect_uri=http%3A%2F%2Fexample.com%2Fredirect&client_id=340516819320318
在浏览器中打开此url并允许应用程序后,将重定向到具有类似于以下url的页面。
http://example.com/redirect?code=AQDOvI5wqlwNXQ6AK9jepHW4LUKboJk7v9yLGeaFNCDCs1hchWpCYoqDF0FZFLS03YOZJ1lLhrzQrQ7PNWD2iiZZ6IBaW0KG6255_e3prYu60QZd6_IOIiC1z0U3w2SWJDiq_rtD0KQtcJk__YvZa1XSicZA5fnyEtEZBE3XzNpEgzp1fZZ8HEeQCrqazGjUNjU#_=_
您需要将此代码粘贴到下面的code变量中。
>>> from ecl_facebook import Facebook >>> code = "AQDOvI5wqlwNXQ6AK9jepHW4LUKboJk7v9yLGeaFNCDCs1hchWpCYoqDF0FZFLS03YOZJ1lLhrzQrQ7PNWD2iiZZ6IBaW0KG6255_e3prYu60QZd6_IOIiC1z0U3w2SWJDiq_rtD0KQtcJk__YvZa1XSicZA5fnyEtEZBE3XzNpEgzp1fZZ8HEeQCrqazGjUNjU" >>> facebook = Facebook() >>> data = facebook.oauth.access_token(code=code) >>> data <Objectifier#dict access_token=str expires=str>
恭喜你,你已经通过了Facebook的认证。data是 一个Objectifier对象,它应该包含您的令牌及其过期时间 时间。
要调用API,请使用新获取的访问令牌和访问令牌密钥
>>> facebook = Facebook(data.access_token) >>> facebook.me() <Objectifier#dict username=unicode first_name=unicode last_name=unicode verified=bool name=unicode locale=unicode gender=unicode email=unicode link=unicode timezone=int updated_time=unicode id=unicode>
所以,是的。就这样。多产多产。
与django集成
我们上面做的很简单。对于django项目,我们已经让它变得更加简单。在您的视图文件中,
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): 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(reverse('home')) else: # handle authentication exception pass
当然,您需要在 URL文件。现在,将这些值添加到设置中。
# The User model that you'll be using to authenticate with Facebook. PRIMARY_USER_MODEL = "app.User" AUTHENTICATION_BACKENDS = ( # ... 'ecl_facebook.backends.FacebookAuthBackend', ) FACEBOOK_KEY = "256064624431781" FACEBOOK_SECRET = "4925935cb93e3446eff851ddaf5fad07" FACEBOOK_REDIRECT_URL = "http://example.com/oauth/complete" FACEBOOK_SCOPE = "email"
还有一个名为FACEBOOK_CSRF_TOKEN_REQUIRED的设置,即True 默认情况下。我们不建议你改变这个,除非你有一个非常好的 原因。
然后在url.py中映射上述视图。
# ... urlpatterns = patterns('app.views', # ... url(r'^oauth/facebook/begin$', 'oauth_facebook_begin'), url(r'^oauth/facebook/complete$', 'oauth_facebook_complete'), )
你完了。哦,您可能还需要添加一些字段来存储 用户模型中与Facebook相关的字段。
待办事项
- 其他流行的Python框架的装饰器
- 更全面的测试套件。
- 更多用户!
索引和表格
- genindex
- 修改
- 搜索