From: Matías Aguirre Date: Tue, 12 Jun 2012 18:47:08 +0000 (-0300) Subject: Example for multiple partial pipeline usage. Closes #369 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=4be092a22e91cc3a73fb5cb18952aa42f0532ea3;p=django-social-auth.git Example for multiple partial pipeline usage. Closes #369 --- diff --git a/example/app/pipeline.py b/example/app/pipeline.py index b10a665..2cb2288 100644 --- a/example/app/pipeline.py +++ b/example/app/pipeline.py @@ -1,6 +1,12 @@ from django.http import HttpResponseRedirect +def redirect_to_form(*args, **kwargs): + if not kwargs['request'].session.get('saved_username') and \ + kwargs.get('user') is None: + return HttpResponseRedirect('/form/') + + def username(request, *args, **kwargs): if kwargs.get('user'): username = kwargs['user'].username @@ -9,7 +15,13 @@ def username(request, *args, **kwargs): return {'username': username} -def redirect_to_form(*args, **kwargs): - if not kwargs['request'].session.get('saved_username') and \ - kwargs.get('user') is None: - return HttpResponseRedirect('/form/') +def redirect_to_form2(*args, **kwargs): + if not kwargs['request'].session.get('saved_first_name'): + return HttpResponseRedirect('/form2/') + + +def first_name(request, *args, **kwargs): + if 'saved_first_name' in request.session: + user = kwargs['user'] + user.first_name = request.session.get('saved_first_name') + user.save() diff --git a/example/app/views.py b/example/app/views.py index 3c10064..553ecbc 100644 --- a/example/app/views.py +++ b/example/app/views.py @@ -49,3 +49,12 @@ def form(request): backend = request.session[name]['backend'] return redirect('socialauth_complete', backend=backend) return render_to_response('form.html', {}, RequestContext(request)) + + +def form2(request): + if request.method == 'POST' and request.POST.get('first_name'): + request.session['saved_first_name'] = request.POST['first_name'] + name = setting('SOCIAL_AUTH_PARTIAL_PIPELINE_KEY', 'partial_pipeline') + backend = request.session[name]['backend'] + return redirect('socialauth_complete', backend=backend) + return render_to_response('form2.html', {}, RequestContext(request)) diff --git a/example/settings.py b/example/settings.py index 4af588c..2235d5d 100644 --- a/example/settings.py +++ b/example/settings.py @@ -105,6 +105,21 @@ TEMPLATE_CONTEXT_PROCESSORS = ( LOGIN_REDIRECT_URL = '/' +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', + 'app.pipeline.redirect_to_form', + 'app.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', + 'app.pipeline.redirect_to_form2', + 'app.pipeline.first_name', +) + try: from local_settings import * except: diff --git a/example/templates/form2.html b/example/templates/form2.html new file mode 100644 index 0000000..413ad52 --- /dev/null +++ b/example/templates/form2.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} + +{% block heading %}User basic form2{% endblock %} + +{% block content %} +
+ {% csrf_token %} +

+ + +

+ + +
+{% endblock %} diff --git a/example/urls.py b/example/urls.py index 8344d27..c55e328 100644 --- a/example/urls.py +++ b/example/urls.py @@ -1,7 +1,7 @@ from django.conf.urls.defaults import patterns, url, include from django.contrib import admin -from app.views import home, done, logout, error, form +from app.views import home, done, logout, error, form, form2 admin.autodiscover() @@ -12,6 +12,7 @@ urlpatterns = patterns('', url(r'^error/$', error, name='error'), url(r'^logout/$', logout, name='logout'), url(r'^form/$', form, name='form'), + url(r'^form2/$', form2, name='form2'), url(r'^admin/', include(admin.site.urls)), url(r'', include('social_auth.urls')), )