2013-01-03 2 views
1

Django 응용 프로그램을 작성하고 Twitter 사용자가 양식을 제출할 때 twython-django를 사용하여 인증하려고합니다. 나는이 예제의 https://github.com/ryanmcgrath/twython-django/tree/master/twython_django_oauth에서 제안한대로 views.py, urls.py 및 models.py 파일을 편집하려고 시도했지만 간단히 추측하고 있으므로 작동하지 않는 것입니다.twython-django를 사용하여 사용자가 양식을 제출할 때 사용자 인증

이 방법을 사용하는 방법을 알려주십시오. 나는 모든 트위터 래퍼에 대해 완전히 새롭다. 그래서 어떤 도움이라도 대단히 감사 할 것이다.

내가 달성하기 위해 노력하고있어 흐름

:

  1. 사용자는
  2. 사용자가 타격에 자신의 트위터 계정을 인증하도록 요청하는 양식을 통해 메시지를 전송 버튼
  3. 사용자의 메시지를 "제출", 트위터 이름, 트위터 screen_name, profile_image_url 및 followers_count가 데이터베이스에 저장됩니다. (Heroku Postgres를 사용하고 있습니다.)
  4. 사용자의 프로필 이미지, 이름, screen_name 및 메시지는 (Twitter와 같은) 피드에서 index.html에 인쇄됩니다.

내 views.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) 

면책 조항 : 위의 코드는 아마 완전한 혼란 그래서 저는 초보자입니다!

+0

twython-django는 실제로 twython을 감싸는 얇은 래퍼이며 트위터 API에 연결하는 것이 좋습니다. 여기에 제시된 단계 (https://github.com/ryanmcgrath/twython-django)를 따랐습니까? 그런 다음 올바른 URL을 누르면 Twitter 인증 사이트로 리디렉션 된 다음 callback_url로 돌아와야합니다. 그것이 작동하면 올바른 방향으로 가고 있습니다. – PepperoniPizza

+0

@PepperoniPizza 예, 나는 거기의 단계를 따라 갔지만 twython-django 예제의 코드를 기존 양식으로 작업하려고했습니다 (위에서 볼 수 있듯이). 그게 잘못된 일이야? twython-django 예제가 사용자가 아무것도 제출하기 전에 로그인/인증 할 때만 유효한지 확실하지 않았습니다. 데이터를 제출 한 후 (제출 버튼을 누를 때) 사용자가 트위터를 인증하도록 요청합니다. 어리석은 질문이라면 죄송합니다. 그러나 트위터 래퍼에 대한 경험이 없으므로 순간적으로 내 머리를 쓰려고합니다. – Jess

답변

1

그렇습니다. 사용 사례는 twython-django가 의도 한 것과 다르지만 귀하의 경우에는 효과가 없을 것이라는 의미는 아니며 귀하의 흐름과 함께 사용할 수 있습니다. 메인 페이지에 설명 된 모든 항목을 설정 한 후, 당신은 당신의 views.py이 뭔가를해야합니다 : 자신의 프로필 이미지와 추종자의 수를로드에 관해서는

from django.shortcuts import redirect, reverse 

def submit(request): 
    # initial form submission, first check if we're authenticated 
    # if we are, process as normal, otherwise redirect to the login 
    # page. If you've set up twython-django correctly, it'll redirect 
    # to twitter for the actual login. 
    if request.method == "POST": 
     if request.user.is_authenticated(): 
      form = MessageForm(request.POST) 
      if form.is_valid(): 
       form.save() 
       return redirect('/') 
      else: 
       # Modify this to display validation errors 
       pass 
     else: 
      request.session['message'] = request.POST 
      # the reverse(submit) resolves this view for redirection 
      # back from the twitter authentication 
      return redirect(settings.LOGIN_URL, next=reverse(submit)) 

    # A Get request, where we should first check for the message stored 
    # We then process the form and remove it from session to prevent 
    # accidental re-use. 
    else: 
     if 'message' in request.session and request.user.is_authenticated(): 
      form = MessageForm(request.session['message']) 
      del request.session['message'] 
      if form.is_valid(): 
       form.save() 
       return redirect('/') 
      else: 
       # Modify this to display validation errors 
       pass 
     else: 
      # handle the case where this is a get request and the variable 
      # isn't in session 
      pass 

을, 사람들은 현재 twython에 의해 전혀 처리되지 않습니다 장고. github에 포크하여 TwitterProfile 모델에 추가하고 감사보기에 적절한 코드를 추가하여 코드를로드하거나 TwitterProfile을 확장하는 코드에 새 모델을 추가 할 수 있습니다.

from twython_django_oauth.models import TwitterProfile 
from django import models 

class ExtendedTwitterProfile(models.Model) 
    profile = models.OneToOne(TwitterProfile, related_name="extended") 
    avatar = models.CharField(max_length=255) 
    followers = models.IntegerField() 

코드를 제출보기에 추가하여 필요에 따라 프로필을 추가 ​​/ 업데이트하십시오.

extended_profile = ExtendedTwitterProfile.objects.get_or_create(profile=request.user.twitterprofile) 
extended_profile.avatar = avatarurl 
extended_profile.followers = followercount 

extended_profile.save() 

당신은 내가 과거에 예를 들어, 아바타를 얻을 수있는 URL을 사용 가지고 있지만

user.twitterprofile.extended.avatar 

를 통해 그 내용을 액세스 할 수 있어야합니다 : A의

# avatar redirection urls 
url(r'^avatar/(?P<userid>[0-9A-Za-z_]+)$', redirect_to, 
    { 'url' : 'http://api.twitter.com/1/users/profile_image/%(userid)s.json' }, name='avatar'),  
url(r'^avatar/(?P<userid>[0-9A-Za-z_]+)/(?P<size>[a-z]+)$', redirect_to, 
    { 'url' : 'http://api.twitter.com/1/users/profile_image?screen_name=%(userid)s&size=%(size)s' }), 

템플릿을 사용하여 아바타를 표시하려면 URL 템플릿 태그를 사용하여 img 태그를 사용하고 역방향 URL 확인을 수행하십시오 (예 :

).
<img src="{% url avatar userid=request.user.username %}" /> 

은 추가 포인터로, 당신은 또한

https://twitter.com/users/zandeez.json 

예를 들어, 당신에게 형태로 내 공개 프로필을 얻을 것이다 당신이 파이썬에서 중 사용할 수있는 트위터의 JSON API를 통해 사용자의 기본 모든 세부 사항을 요청할 수 있습니다 추종자 카운트로 무엇을하고 싶은지에 따라 urllib 또는 javascript/ajax를 사용합니다.

더 이상 도움이 필요하면 잘 부탁드립니다.

관련 문제