From 132625f5214ab4c4d33424bfba0e342a18922649 Mon Sep 17 00:00:00 2001 From: ajurna Date: Wed, 8 Jul 2015 16:08:41 +0100 Subject: [PATCH] added account page to change password and email address. --- comic/forms.py | 30 ++++++++++++++++++ comic/templates/comic/settings_page.html | 5 ++- comic/urls.py | 1 + comic/util.py | 1 + comic/views.py | 40 +++++++++++++++++++++++- 5 files changed, 75 insertions(+), 2 deletions(-) diff --git a/comic/forms.py b/comic/forms.py index 72d8416..adec6d2 100644 --- a/comic/forms.py +++ b/comic/forms.py @@ -1,6 +1,36 @@ from django import forms from comic.models import Setting +class AccountForm(forms.Form): + username = forms.CharField(help_text='Username', + required=False, + widget=forms.TextInput( + attrs={ + 'class': 'form-control disabled', + 'readonly': True, + } + )) + email = forms.CharField(help_text='Email Address', + widget=forms.TextInput( + attrs={ + 'class': 'form-control' + } + )) + password1 = forms.CharField(help_text='New Password', + required=False, + widget=forms.PasswordInput( + attrs={ + 'class': 'form-control', + } + )) + password2 = forms.CharField(help_text='New Password Confirmation', + required=False, + widget=forms.PasswordInput( + attrs={ + 'class': 'form-control', + } + )) + class SettingsForm(forms.Form): base_dir = forms.CharField(help_text='Base Directory', diff --git a/comic/templates/comic/settings_page.html b/comic/templates/comic/settings_page.html index 41b049e..0da870f 100644 --- a/comic/templates/comic/settings_page.html +++ b/comic/templates/comic/settings_page.html @@ -4,7 +4,10 @@ {% block content %} {% if error_message %} - + +{% endif %} +{% if success_message %} + {% endif %}
{% csrf_token %} diff --git a/comic/urls.py b/comic/urls.py index c7d9056..bd4f979 100644 --- a/comic/urls.py +++ b/comic/urls.py @@ -5,6 +5,7 @@ from . import views urlpatterns = [ url(r'^$', views.comic_list, name='index'), url(r'^settings/$', views.settings_page, name='settings'), + url(r'^account/$', views.account_page, name='account'), url(r'^(?P[\w]+)/$', views.comic_list, name='comic_list'), url(r'^read/(?P[\w]+)/(?P[0-9]+)/$', views.read_comic, name='read_comic'), url(r'^read/(?P[\w]+)/(?P[0-9]+)/img$', views.get_image, name='get_image'), diff --git a/comic/util.py b/comic/util.py index eabb9f1..fd3f330 100644 --- a/comic/util.py +++ b/comic/util.py @@ -13,6 +13,7 @@ class Menu: """ self.menu_items = OrderedDict() self.menu_items['Browse'] = '/comic/' + self.menu_items['Account'] = '/comic/account/' self.menu_items['Settings'] = '/comic/settings/' self.menu_items['Logout'] = '/logout/' self.current_page = page diff --git a/comic/views.py b/comic/views.py index 77a98e4..1e1a56d 100644 --- a/comic/views.py +++ b/comic/views.py @@ -3,10 +3,12 @@ from django.template import RequestContext from django.utils.http import urlsafe_base64_decode from django.shortcuts import render, redirect from django.contrib.auth.decorators import login_required +from django.core.validators import validate_email +from django.core.exceptions import ValidationError from comic.models import Setting, ComicBook, ComicStatus from util import generate_breadcrumbs -from forms import SettingsForm +from forms import SettingsForm, AccountForm from util import Menu from os import path @@ -29,6 +31,42 @@ def comic_list(request, comic_path=''): }) return render(request, 'comic/comic_list.html', context) +@login_required +def account_page(request): + error_message = [] + success_message = [] + if request.POST: + form = AccountForm(request.POST) + if form.is_valid(): + if form.cleaned_data['password1'] != '': + if form.cleaned_data['password1'] == form.cleaned_data['password2']: + if len(form.cleaned_data['password1']) < 8: + error_message.append('Password is too short') + else: + success_message.append('password changed') + request.user.set_password(form.cleaned_data['password1']) + else: + error_message.append("Passwords don't match") + if form.cleaned_data['email'] != request.user.email: + try: + validate_email(form.cleaned_data['email']) + success_message.append('Email Address updated') + request.user.email = form.cleaned_data['email'] + except ValidationError: + error_message.append('Invalid E-mail.') + request.user.save() + else: + form = AccountForm(initial={ + 'username': request.user.username, + 'email': request.user.email, + }) + context = RequestContext(request, { + 'form': form, + 'menu': Menu('Account'), + 'error_message': '
'.join(error_message), + 'success_message': '
'.join(success_message), + }) + return render(request, 'comic/settings_page.html', context) @login_required def settings_page(request):