From 0752cd5ff4136e58084ed5e2633d88e372c67a3b Mon Sep 17 00:00:00 2001 From: Felipe Martin Date: Wed, 19 Mar 2014 11:58:40 +0100 Subject: [PATCH] Added login/logout views. Added login form. --- shelfzilla/apps/users/forms.py | 38 +++++++++++++++ shelfzilla/apps/users/urls.py | 3 +- shelfzilla/apps/users/views.py | 48 ++++++++++++++++++- .../bootflat/templates/users/login.html | 7 +++ shelfzilla/urls.py | 1 + 5 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 shelfzilla/themes/bootflat/templates/users/login.html diff --git a/shelfzilla/apps/users/forms.py b/shelfzilla/apps/users/forms.py index e69de29..485ad7d 100644 --- a/shelfzilla/apps/users/forms.py +++ b/shelfzilla/apps/users/forms.py @@ -0,0 +1,38 @@ +from django import forms +from django.contrib.auth import authenticate +from django.utils.translation import ugettext_lazy as _ + + +class LoginForm(forms.Form): + email = forms.EmailField(max_length=75) + password = forms.CharField( + max_length=255, widget=forms.PasswordInput) + + def authenticate(self): + result = None + + if self.cleaned_data: + email = self.cleaned_data['email'] + password = self.cleaned_data['password'] + + result = authenticate(username=email, password=password) + + return result + + def clean(self): + data = self.cleaned_data + + if not self.errors: + user = self.authenticate() + + if user is not None: + if not user.is_active: + raise forms.ValidationError( + _("This account is disabled.") + ) + else: + raise forms.ValidationError( + _('User with those credentials was not found.') + ) + + return data diff --git a/shelfzilla/apps/users/urls.py b/shelfzilla/apps/users/urls.py index c6a5042..db8421d 100644 --- a/shelfzilla/apps/users/urls.py +++ b/shelfzilla/apps/users/urls.py @@ -1,8 +1,9 @@ from django.conf.urls import patterns, url -from .views import LoginView +from .views import LoginView, LogoutView urlpatterns = patterns( '', url(r'^login/$', LoginView.as_view()), + url(r'^logout/$', LogoutView.as_view()), ) diff --git a/shelfzilla/apps/users/views.py b/shelfzilla/apps/users/views.py index d1777fe..ce87d3d 100644 --- a/shelfzilla/apps/users/views.py +++ b/shelfzilla/apps/users/views.py @@ -1,11 +1,55 @@ from django.views.generic import View from django.template import RequestContext from django.shortcuts import render_to_response +from django.contrib.auth import logout +from django.utils.translation import ugettext_lazy as _ +from django.http import HttpResponseRedirect +from django.contrib import messages +from django.contrib.auth import login + +from .forms import LoginForm class LoginView(View): - template = 'landing/landing.html' + template = 'users/login.html' def get(self, request): - ctx = RequestContext(request, {}) + context = { + 'login_form': LoginForm() + } + + ctx = RequestContext(request, context) return render_to_response(self.template, context_instance=ctx) + + def post(self, request): + login_form = LoginForm(request.POST) + + if login_form.is_valid(): + user = login_form.authenticate() + login(request, user) + + messages.success( + request, + _('Logged in successfully.') + ) + + return HttpResponseRedirect('/') + + context = { + 'login_form': login_form, + } + + ctx = RequestContext(request, context) + return render_to_response(self.template, context_instance=ctx) + + +class LogoutView(View): + def get(self, request): + logout(request) + + messages.success( + request, + _('Logged out successfully') + ) + + return HttpResponseRedirect('/') diff --git a/shelfzilla/themes/bootflat/templates/users/login.html b/shelfzilla/themes/bootflat/templates/users/login.html new file mode 100644 index 0000000..bd097b5 --- /dev/null +++ b/shelfzilla/themes/bootflat/templates/users/login.html @@ -0,0 +1,7 @@ +{% block main_content %} +
+ {% csrf_token %} + {{ login_form.as_p }} + +
+{% endblock %} diff --git a/shelfzilla/urls.py b/shelfzilla/urls.py index 9991013..90b6495 100644 --- a/shelfzilla/urls.py +++ b/shelfzilla/urls.py @@ -6,5 +6,6 @@ admin.autodiscover() urlpatterns = patterns( '', url(r'^', include('shelfzilla.apps.landing.urls')), + url(r'^', include('shelfzilla.apps.users.urls')), url(r'^admin/', include(admin.site.urls)), )