Login newly registered user

Rewritten register view using CBV approach, and added a authenticate/login
call after form has been validated and user created. Fixes #65
This commit is contained in:
Krzysztof Klimonda
2013-03-02 12:26:54 -08:00
parent 68e01b5a39
commit e70d9079ec
2 changed files with 28 additions and 19 deletions

View File

@@ -3,6 +3,7 @@ from django.conf.urls import patterns, include, url
from tastypie.api import Api
from .api import ImageResource, ThumbnailResource, PinResource, UserResource
from .views import CreateUser
v1_api = Api(api_name='v1')
@@ -25,5 +26,5 @@ urlpatterns = patterns('',
url(r'^login/$', 'django.contrib.auth.views.login',
{'template_name': 'user/login.html'}, name='login'),
url(r'^logout/$', 'pinry.core.views.logout_user', name='logout'),
url(r'^register/$', 'pinry.core.views.register', name='register'),
url(r'^register/$', CreateUser.as_view(), name='register'),
)

View File

@@ -3,11 +3,17 @@ from django.template.response import TemplateResponse
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.contrib.auth.decorators import login_required
from django.contrib.auth import logout
from django.contrib.auth import logout, authenticate, login
from django.contrib import messages
from django.conf import settings
from django.utils.functional import lazy
from django.views.generic import CreateView
from .forms import UserCreationForm
from .models import User
reverse_lazy = lambda name=None, *args : lazy(reverse, str)(name, args=args)
def home(request):
@@ -18,24 +24,26 @@ def private(request):
return TemplateResponse(request, 'user/private.html', None)
def register(request):
if not settings.ALLOW_NEW_REGISTRATIONS:
messages.error(request, "The admin of this service is not "
"allowing new registrations.")
return HttpResponseRedirect(reverse('pins:recent-pins'))
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
permissions = Permission.objects.filter(codename__in=['add_pin', 'add_image'])
user = form.save()
user.user_permissions = permissions
messages.success(request, 'Thank you for registering, you can now '
'login.')
return HttpResponseRedirect(reverse('core:login'))
else:
form = UserCreationForm()
class CreateUser(CreateView):
template_name = 'user/register.html'
model = User
form_class = UserCreationForm
success_url = reverse_lazy('pins:recent-pins')
return TemplateResponse(request, 'user/register.html', {'form': form})
def get(self, request, *args, **kwargs):
if not settings.ALLOW_NEW_REGISTRATIONS:
messages.error(request, "The admin of this service is not allowing new registrations.")
return HttpResponseRedirect(reverse('pins:recent-pins'))
return super(CreateUser, self).get(request, *args, **kwargs)
def form_valid(self, form):
redirect = super(CreateUser, self).form_valid(form)
permissions = Permission.objects.filter(codename__in=['add_pin', 'add_image'])
user = authenticate(username=form.cleaned_data['username'],
password=form.cleaned_data['password'])
user.user_permissions = permissions
login(self.request, user)
return redirect
@login_required