diff --git a/pinry/core/urls.py b/pinry/core/urls.py index 613bbc5..a9eb392 100644 --- a/pinry/core/urls.py +++ b/pinry/core/urls.py @@ -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'), ) diff --git a/pinry/core/views.py b/pinry/core/views.py index ca834d4..2f74804 100644 --- a/pinry/core/views.py +++ b/pinry/core/views.py @@ -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