Merge 278d5c3db0 into 9aa7c87d1d
This commit is contained in:
commit
9c9dc907aa
5 changed files with 83 additions and 36 deletions
|
|
@ -34,20 +34,29 @@ Twython also requires the (most excellent) OAuth2 library for handling OAuth tok
|
|||
|
||||
Installation
|
||||
-----------------------------------------------------------------------------------------------------
|
||||
Copy the "twython_django_oauth" app into your project, and add it to your "INSTALLED_APPS" in your
|
||||
settings.py file. If you wish to use the example template, feel free to copy that over as well.
|
||||
|
||||
pip install git+http://github.com/zandeez/twython-django.git
|
||||
|
||||
Add "twython_django_oauth" to your "INSTALLED_APPS" in your settings.py file. If you wish to use the example
|
||||
template, feel free to copy that over as well.
|
||||
|
||||
After you've done that, specify the following urlconf in your root urls.py:
|
||||
|
||||
(r'^your_url_extension/', include('your_app.twython_django_oauth.urls')),
|
||||
(r'^your_url_extension/', include('twython_django_oauth.urls')),
|
||||
|
||||
Add the following settings to settings.py:
|
||||
|
||||
If you're using this app bare-bones (i.e, just starting out), add the following to your settings.py:
|
||||
TWITTER_KEY = 'your_key'
|
||||
|
||||
AUTH_PROFILE_MODULE = 'twython_django_oauth.Profile'
|
||||
|
||||
(Obviously, if you've got your own custom User/Profile setup going, this should all be pretty self explanatory
|
||||
to integrate into your application. The OAuth handshake flow is well documented here, as well as how to use it
|
||||
with Twython calls.)
|
||||
TWITTER_SECRET = 'your_secret'
|
||||
|
||||
LOGIN_URL='/your_url_extension/login'
|
||||
|
||||
LOGOUT_URL='/your_url_extension/logout'
|
||||
|
||||
LOGIN_REDIRECT_URL='/'
|
||||
|
||||
LOGOUT_REDIRECT_URL='/'
|
||||
|
||||
Restart your Django app, and it should all work auto-magically. Build onwards from here if you're
|
||||
just starting out, or integrate this into your existing model setup if you're already Django-savvy.
|
||||
|
|
|
|||
39
setup.py
Normal file
39
setup.py
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
import sys, os
|
||||
from setuptools import setup
|
||||
from setuptools import find_packages
|
||||
|
||||
__author__ = 'Ryan McGrath <ryan@venodesigns.net>'
|
||||
__version__ = '1.4.5'
|
||||
|
||||
setup(
|
||||
# Basic package information.
|
||||
name = 'twython-django',
|
||||
version = __version__,
|
||||
packages = find_packages(),
|
||||
|
||||
# Packaging options.
|
||||
include_package_data = True,
|
||||
|
||||
# Package dependencies.
|
||||
install_requires = ['simplejson', 'oauth2', 'httplib2', 'twython', 'django'],
|
||||
provides = ['twython_django_oauth'],
|
||||
|
||||
# Metadata for PyPI.
|
||||
author = 'Ryan McGrath',
|
||||
author_email = 'ryan@venodesigns.net',
|
||||
license = 'MIT License',
|
||||
url = 'http://github.com/ryanmcgrath/twython-django/tree/master',
|
||||
keywords = 'Django integration for twython',
|
||||
description = 'An easy (and up to date) way to access Twitter data with Python.',
|
||||
long_description = open('README.markdown').read(),
|
||||
classifiers = [
|
||||
'Development Status :: 4 - Beta',
|
||||
'Intended Audience :: Developers',
|
||||
'License :: OSI Approved :: MIT License',
|
||||
'Topic :: Software Development :: Libraries :: Python Modules',
|
||||
'Topic :: Communications :: Chat',
|
||||
'Topic :: Internet'
|
||||
]
|
||||
)
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
class Profile(models.Model):
|
||||
class TwitterProfile(models.Model):
|
||||
"""
|
||||
An example Profile model that handles storing the oauth_token and
|
||||
oauth_secret in relation to a user. Adapt this if you have a current
|
||||
setup, there's really nothing special going on here.
|
||||
"""
|
||||
user = models.ForeignKey(User)
|
||||
user = models.OneToOneField(User)
|
||||
oauth_token = models.CharField(max_length = 200)
|
||||
oauth_secret = models.CharField(max_length = 200)
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
from django.conf.urls.defaults import *
|
||||
|
||||
# your_app = name of your root djang app.
|
||||
urlpatterns = patterns('your_app.twython_django_oauth.views',
|
||||
urlpatterns = patterns('twython_django_oauth.views',
|
||||
|
||||
# First leg of the authentication journey...
|
||||
(r'^login/?$', "begin_auth"),
|
||||
url(r'^login/?$', "begin_auth", name="twitter_login"),
|
||||
|
||||
# Logout, if need be
|
||||
(r'^/logout?$', "logout"), # Calling logout and what not
|
||||
url(r'^logout/?$', "logout", name="twitter_logout"), # Calling logout and what not
|
||||
|
||||
# This is where they're redirected to after authorizing - we'll
|
||||
# further (silently) redirect them again here after storing tokens and such.
|
||||
(r'^thanks/?$', "thanks"),
|
||||
url(r'^thanks/?$', "thanks", name="twitter_callback"),
|
||||
|
||||
# An example view using a Twython method with proper OAuth credentials. Clone
|
||||
# this view and url definition to get the rest of your desired pages/functionality.
|
||||
(r'^user_timeline/?$', "user_timeline"),
|
||||
url(r'^user_timeline/?$', "user_timeline", name="twitter_timeline"),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,26 +1,24 @@
|
|||
from django.contrib.auth import authenticate, login, logout
|
||||
from django.contrib.auth import authenticate, login, logout as django_logout
|
||||
from django.contrib.auth.models import User
|
||||
from django.http import HttpResponse, HttpResponseRedirect
|
||||
from django.shortcuts import render_to_response
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import reverse
|
||||
|
||||
from twython import Twython
|
||||
|
||||
# If you've got your own Profile setup, see the note in the models file
|
||||
# about adapting this to your own setup.
|
||||
from your_app.twython_django_oauth.models import Profile
|
||||
from twython_django_oauth.models import TwitterProfile
|
||||
|
||||
# Move these into your settings.py if you're feeling adventurous.
|
||||
CONSUMER_KEY = "YOUR CONSUMER KEY HERE"
|
||||
CONSUMER_SECRET = "YOUR CONSUMER SECRET HERE"
|
||||
|
||||
def logout(request):
|
||||
def logout(request, redirect_url=settings.LOGOUT_REDIRECT_URL):
|
||||
"""
|
||||
Nothing hilariously hidden here, logs a user out. Strip this out if your
|
||||
application already has hooks to handle this.
|
||||
"""
|
||||
logout(request)
|
||||
return HttpResponseRedirect('/')
|
||||
django_logout(request)
|
||||
return HttpResponseRedirect(request.build_absolute_uri(redirect_url))
|
||||
|
||||
def begin_auth(request):
|
||||
"""
|
||||
|
|
@ -29,8 +27,9 @@ def begin_auth(request):
|
|||
"""
|
||||
# Instantiate Twython with the first leg of our trip.
|
||||
twitter = Twython(
|
||||
twitter_token = CONSUMER_KEY,
|
||||
twitter_secret = CONSUMER_SECRET
|
||||
twitter_token = settings.TWITTER_KEY,
|
||||
twitter_secret = settings.TWITTER_SECRET,
|
||||
callback_url = request.build_absolute_uri(reverse('twython_django_oauth.views.thanks'))
|
||||
)
|
||||
|
||||
# Request an authorization url to send the user to...
|
||||
|
|
@ -40,7 +39,7 @@ def begin_auth(request):
|
|||
request.session['request_token'] = auth_props
|
||||
return HttpResponseRedirect(auth_props['auth_url'])
|
||||
|
||||
def thanks(request):
|
||||
def thanks(request, redirect_url=settings.LOGIN_REDIRECT_URL):
|
||||
"""
|
||||
A user gets redirected here after hitting Twitter and authorizing your
|
||||
app to use their data.
|
||||
|
|
@ -53,10 +52,10 @@ def thanks(request):
|
|||
# Now that we've got the magic tokens back from Twitter, we need to exchange
|
||||
# for permanent ones and store them...
|
||||
twitter = Twython(
|
||||
twitter_token = CONSUMER_KEY,
|
||||
twitter_secret = CONSUMER_SECRET,
|
||||
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']
|
||||
oauth_token_secret = request.session['request_token']['oauth_token_secret'],
|
||||
)
|
||||
|
||||
# Retrieve the tokens we want...
|
||||
|
|
@ -68,7 +67,7 @@ def thanks(request):
|
|||
except User.DoesNotExist:
|
||||
# We mock a creation here; no email, password is just the token, etc.
|
||||
user = User.objects.create_user(authorized_tokens['screen_name'], "fjdsfn@jfndjfn.com", authorized_tokens['oauth_token_secret'])
|
||||
profile = Profile()
|
||||
profile = TwitterProfile()
|
||||
profile.user = user
|
||||
profile.oauth_token = authorized_tokens['oauth_token']
|
||||
profile.oauth_secret = authorized_tokens['oauth_token_secret']
|
||||
|
|
@ -79,17 +78,17 @@ def thanks(request):
|
|||
password = authorized_tokens['oauth_token_secret']
|
||||
)
|
||||
login(request, user)
|
||||
return HttpResponseRedirect('/timeline')
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
|
||||
def user_timeline(request):
|
||||
"""
|
||||
An example view with Twython/OAuth hooks/calls to fetch data about the user
|
||||
in question. Pretty self explanatory if you read through it...
|
||||
"""
|
||||
user = request.user.get_profile()
|
||||
user = request.user.twitterprofile
|
||||
twitter = Twython(
|
||||
twitter_token = CONSUMER_KEY,
|
||||
twitter_secret = CONSUMER_SECRET,
|
||||
twitter_token = settings.TWITTER_KEY,
|
||||
twitter_secret = settings.TWITTER_SECRET,
|
||||
oauth_token = user.oauth_token,
|
||||
oauth_token_secret = user.oauth_secret
|
||||
)
|
||||
|
|
|
|||
Reference in a new issue