Modular Changes #2

Merged
zandeez merged 5 commits from master into master 2011-11-16 12:15:32 -08:00
5 changed files with 73 additions and 31 deletions
Showing only changes of commit 7fa1747b38 - Show all commits

View file

@ -34,20 +34,25 @@ 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'
TWITTER_SECRET = 'your_secret'
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.)
LOGIN_URL='/your_url_extension/login'
LOGIN_REDIRECT_URL='/'
LOGOUT_URL='/your_url_extension/logout'
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.

38
setup.py Normal file
View file

@ -0,0 +1,38 @@
#!/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'],
# 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'
]
)

View file

@ -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)

View file

@ -1,13 +1,13 @@
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"),
# Logout, if need be
(r'^/logout?$', "logout"), # Calling logout and what not
(r'^logout/?$', "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.

View file

@ -3,24 +3,22 @@ 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('/')
return HttpResponseRedirect(request.build_absolute_uri(reverse(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
)