Django轻松整合Facebook。

ecl_facebook的Python项目详细描述


ECL脸谱网

ECL Facebook是Python2.7+的Facebook库。它使facebook api成为 很好用,并且内置了DjangoFlask的集成。

如果有问题需要报告或功能请求,请将其添加到 https://github.com/elmcitylabs/ECL-Facebook/issues

安装

ecl facebook位于PyPi,我们建议通过pip安装

$ pip install ecl-facebook

配置

如果您想使用ECL Facebook作为独立应用程序(例如 你写的脚本是为了下载你的tweets),你需要设置 环境变量FACEBOOK_KEYFACEBOOK_SECRETFACEBOOK_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
  • 修改
  • 搜索

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何定制springdata存储库方法名称?   html有没有办法将java应用程序或JApplet嵌入到网站中?   Jackson ObjectMapper将java从字符串序列化为JSON作为namevalue   java刷新JTable?   用Java程序分发用JavaDB制作的数据库   java Android如何启动新活动   当集合大小超过500.000时,java的处理速度会显著降低   在java的分层目录中的多个目录中查找相同的文件   java如何将ArrayList数据插入数据库   java如何修改此代码,使其时间复杂度为o(logn)或o(n),而不是o(n^2)   java面板(SimplePanel)中仅显示图像的前1/3(大约),   jakarta ee Java Bean和企业Java Bean之间的区别?   创建AWS Cloudfront自签名URL(java sdk)时出现amazon web服务错误   基于Jersey和Jackson查询参数的java动态属性过滤