我正在构建一个 Django 应用程序,并尝试在他们提交表单时使用 twython-django 对 Twitter 用户进行身份验证。我已尝试按照此示例https://github.com/ryanmcgrath/twython-django/tree/master/twython_django_oauth的建议编辑我的views.py、urls.py 和models.py 文件,但我只是在猜测所以我确定这就是它不起作用的原因。
你能帮我解决如何让它工作吗?我对 Twitter 包装器完全陌生,因此非常感谢任何帮助。
我试图实现的流程:
- 用户通过表单提交消息
- 用户被要求在点击“提交”按钮时验证他们的 Twitter 帐户
- 用户的消息、Twitter 名称、Twitter screen_name、profile_image_url 和 follower_count 保存在数据库中(我使用的是 Heroku Postgres)
- 用户的个人资料图像、姓名、screen_name 和消息被打印到 index.html 中(类似 Twitter)的提要中。
我的意见.py:
def logout(request, redirect_url=settings.LOGOUT_REDIRECT_URL):
django_logout(request)
return HttpResponseRedirect(request.build_absolute_uri(redirect_url))
def submit(request):
twitter = Twython(
twitter_token=settings.TWITTER_KEY,
twitter_secret=settings.TWITTER_SECRET,
callback_url=request.build_absolute_uri(reverse('alpha.views.submit'))
)
auth_props = twitter.get_authentication_tokens()
request.session['request_token'] = auth_props
return HttpResponseRedirect(auth_props['auth_url'])
form = MessageForm(request.session.get('message'))
if form.is_valid():
new_message = form.save()
return HttpResponseRedirect('/')
else:
request.session['message'] = request.POST
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_authentication_tokens()
try:
user = User.objects.get(username = authorized_tokens['screen_name'])
except User.DoesNotExist:
user = User.objects.create_user(authorized_tokens['screen_name'], authorized_tokens['oauth_token_secret'])
profile = Message()
profile.user = user
profile.name = name
profile.profile_image_url = profile_image_url
profile.oauth_token = authorized_tokens['oauth_token']
profile.oauth_secret = authorized_tokens['oauth_token_secret']
profile.save()
user = authenticate(
username = authorized_tokens['screen_name'],
password = authorized_tokens['oauth_token_secret']
)
login(request, user)
return HttpResponseRedirect(redirect_url)
免责声明:我是新手,所以上面的代码可能是一团糟!