Какую библиотеку Django использовать для Facebook Graph API?

В настоящее время я разрабатываю приложение в Django и пытаюсь реализовать аутентификацию Facebook и запросы к API Graph. Я видел несколько разных библиотек, но как лучше всего сделать следующее:

  1. Иметь вход пользователя через Facebook.
  2. Django создает для них нового пользователя и добавляет его uid и токен oauth.
  3. Затем я могу совершать вызовы API Graph с помощью Facebook Python SDK.

Я видел этот пример. Это так просто на обычном Django?


person Cole Gleason    schedule 23.11.2010    source источник


Ответы (3)


Моя компания создала библиотеку, которая максимально упрощает интеграцию Facebook в ваше приложение Django (мы, вероятно, создали 10-20 приложений с этой библиотекой, в том числе с огромным объемом трафика, так что она была проверена в бою).

pip install ecl-facebook==1.2.7

В настройках добавьте значения для FACEBOOK_KEY, FACEBOOK_SECRET, FACEBOOK_SCOPE, FACEBOOK_REDIRECT_URL и PRIMARY_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'),
)

Надеюсь это поможет!

P.S. Остальные документы можно прочитать здесь.

person dwlz    schedule 15.04.2012

Там, где я работаю, мы много занимаемся разработкой приложений для Facebook, поэтому мы разработали библиотеку с открытым исходным кодом. что делает все об этом действительно легко.

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)
person Johannes Gorset    schedule 09.02.2011

Я рекомендую https://github.com/egnity/fb.py. Мое приложение Facebook на основе Django заработало в кратчайшие сроки. Он включает в себя промежуточное программное обеспечение, которое позволяет вам запускать код, подобный этому, в вашем представлении:

для идентификатора пользователя:

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, который поможет вам приступить к работе.

person Simon Kagwi    schedule 06.01.2011
comment
Этот пользователь/репо, похоже, исчез. - person Cole Gleason; 04.02.2011
comment
Истинный. Попробуйте https://github.com/emre/fb.py - я думаю, это то же самое проект - person Simon Kagwi; 03.05.2011