gpt4 book ai didi

python - 如何使用 Django Social Auth 连接 Twitter?

转载 作者:太空狗 更新时间:2023-10-29 17:50:19 25 4
gpt4 key购买 nike

我正在尝试使用 Django Social Auth包连接到 Twitter,但我很难理解如何做到这一点,因为我找不到任何例子。我假设 Django Social Auth 是用于此目的的最佳包。

我查看了一些使用 Facebook 的示例,并将以下内容添加到我的 settings.py 文件中:

AUTHENTICATION_BACKENDS = (
'social_auth.backends.twitter.TwitterBackend',
'django.contrib.auth.backends.ModelBackend',
)

# overwriting default templates
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.static',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.contrib.messages.context_processors.messages',
'social_auth.context_processors.social_auth_by_type_backends',
'django.contrib.auth.context_processors.auth',
)

SOCIAL_AUTH_ENABLED_BACKENDS = ('twitter')
SOCIAL_AUTH_DEFAULT_USERNAME = 'new_social_auth_user'

# Social media login info:
TWITTER_CONSUMER_KEY = 'xxx'
TWITTER_CONSUMER_SECRET = 'xxxxxx'

# 'magic' settings
SOCIAL_AUTH_COMPLETE_URL_NAME = 'socialauth_complete'
SOCIAL_AUTH_ASSOCIATE_URL_NAME = 'associate_complete'

SOCIAL_AUTH_PIPELINE = (
'social_auth.backends.pipeline.social.social_auth_user',
'social_auth.backends.pipeline.associate.associate_by_email',
'social_auth.backends.pipeline.misc.save_status_to_session',
'social.pipeline.redirect_to_form',
'social.pipeline.username',
'social_auth.backends.pipeline.user.create_user',
'social_auth.backends.pipeline.social.associate_user',
'social_auth.backends.pipeline.social.load_extra_data',
'social_auth.backends.pipeline.user.update_user_details',
'social_auth.backends.pipeline.misc.save_status_to_session',
'social.pipeline.redirect_to_form2',
'social.pipeline.first_name',
)

SOCIAL_AUTH_FORCE_POST_DISCONNECT = True
SOCIAL_AUTH_SESSION_EXPIRATION = False

urls.py 中,我添加了以下几行:

url('', include('social_auth.urls')),
url(r'^twitter/', twitter_app, name='twitter_app')

在名为 twitter.py 的文件中,我添加了以下内容以创建 View :

from django.contrib.auth import BACKEND_SESSION_KEY
from django.contrib.auth.models import AnonymousUser
from django.http import HttpResponse
from django.http import HttpResponseRedirect #dq
from django.shortcuts import render_to_response
from django.template.context import RequestContext

from django.views.decorators.csrf import csrf_exempt
from django.core.cache import cache

from social_auth.models import UserSocialAuth
from social_auth.views import complete as social_complete
from social_auth.utils import setting
from social_auth.backends.twitter import TwitterBackend


# twitter login
def twitter_app(request):
"""twitter login"""
if request.user.is_authenticated():
return HttpResponseRedirect('done')
else:
return render_to_response('twitter.html', {'twitter_app_id':setting('TWITTER_CONSUMER_KEY'),
'warning': request.method == 'GET'}, RequestContext(request))

然后我创建了一个名为 twitter.html 的模板文件,其结构如下:

{% extends "base.html" %}

{% block script %}

Login with <a href="{% url socialauth_begin 'twitter' %}">Twitter</a>

{% endblock %}

这会导致以下错误消息:

The webpage at http://example.com/twitter/done has resulted in too many redirects.

对于我应该做什么,我有点迷茫。我在推特上用我的网站 url 创建了一个应用程序来生成 api/ key 。任何关于我应该走向何方的建议或工作示例的链接都将不胜感激。

最佳答案

我会给你一个样本,这是一个自定义的 Twitter 登录,

  1. 应用的名称是社交
  2. pip 安装 Twython
  3. 创建 LOGIN_REDIRECT_URL、TWITTER_SECRET 和 TWITTER_KEY

settings.py

# Twitter settings
TWITTER_KEY = 'xxxxxx'
TWITTER_SECRET = 'xxxxxxxx'

模型.py

class TwitterProfile(models.Model):
user = models.ForeignKey(User)
oauth_token = models.CharField(
max_length=200
)
oauth_secret = models.CharField(
max_length=200
)
screen_name = models.CharField(
max_length=50,
blank=True, null=True
)

def __unicode__(self):
return "{0}".format(self.user)

urls.py

urlpatterns = patterns('social.views',      
url(
r'^twitter/login/$',
"twitter_login",
name="twitter_login"
),

url(r'^twitter/callback/$',
"twitter_callback",
name="twitter_callback"
),
)

views.py

def twitter_login(request):
twitter = Twython(
twitter_token = settings.TWITTER_KEY,
twitter_secret = settings.TWITTER_SECRET,
callback_url = request.build_absolute_uri(reverse('social:twitter_callback'))
)
auth_props = twitter.get_authentication_tokens()
request.session['request_token'] = auth_props
return HttpResponseRedirect(auth_props['auth_url'])


def twitter_callback(request, redirect_url=settings.LOGIN_REDIRECT_URL):
twitter = Twython(
twitter_token = settings.TWITTER_KEY,
twitter_secret = settings.TWITTER_SECRET,
oauth_token = request.session['request_token']['oauth_token'],
oauth_token_secret = request.session['request_token']['oauth_token_secret'],
)

authorized_tokens = twitter.get_authorized_tokens()

try:
profile = TwitterProfile.objects.get(screen_name = authorized_tokens['screen_name'])
user = User.objects.get(pk=profile.user_id)
user.backend = 'django.contrib.auth.backends.ModelBackend'

if user.is_active:
auth_login(request, user)
return HttpResponseRedirect(reverse('app_name:url_name'))
else:
//failed back to login
return HttpResponseRedirect(reverse('app_name:login'))
except TwitterProfile.DoesNotExist:
screen_name = authorized_tokens['screen_name']
oauth_token = authorized_tokens['oauth_token']
oauth_token_secret = authorized_tokens['oauth_token_secret']

//create new twitter profile
//create new user here
//authenticate the new register user then login
.........

模板

<a href="{% url social:twitter_login %}">Twitter</a>

关于python - 如何使用 Django Social Auth 连接 Twitter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15215668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com