diff --git a/cookbook/templates/settings.html b/cookbook/templates/settings.html index b4bab61a..db2b84d5 100644 --- a/cookbook/templates/settings.html +++ b/cookbook/templates/settings.html @@ -19,7 +19,13 @@
{% csrf_token %} {{ user_name_form|crispy }} - + +
+ +
+ {% csrf_token %} + {{ password_form|crispy }} +

@@ -41,7 +47,7 @@ {% endfor %}
- + diff --git a/cookbook/views/views.py b/cookbook/views/views.py index cb36a996..59d94a2e 100644 --- a/cookbook/views/views.py +++ b/cookbook/views/views.py @@ -3,7 +3,9 @@ import re from datetime import datetime, timedelta from django.contrib import messages +from django.contrib.auth import update_session_auth_hash from django.contrib.auth.decorators import login_required +from django.contrib.auth.forms import PasswordChangeForm from django.shortcuts import render, get_object_or_404 from django_tables2 import RequestConfig from django.utils.translation import gettext as _ @@ -161,26 +163,35 @@ def settings(request): except UserPreference.DoesNotExist: up = None - if request.method == "POST": - form = UserPreferenceForm(request.POST, prefix='preference') - if form.is_valid(): - if not up: - up = UserPreference(user=request.user) - up.theme = form.cleaned_data['theme'] - up.nav_color = form.cleaned_data['nav_color'] - up.save() + user_name_form = UserNameForm(instance=request.user) + password_form = PasswordChangeForm(request.user) - form = UserNameForm(request.POST, prefix='name') - if form.is_valid(): - request.user.first_name = form.cleaned_data['first_name'] - request.user.last_name = form.cleaned_data['last_name'] - request.user.save() + if request.method == "POST": + if 'preference_form' in request.POST: + form = UserPreferenceForm(request.POST, prefix='preference') + if form.is_valid(): + if not up: + up = UserPreference(user=request.user) + up.theme = form.cleaned_data['theme'] + up.nav_color = form.cleaned_data['nav_color'] + up.save() + + if 'user_name_form' in request.POST: + user_name_form = UserNameForm(request.POST, prefix='name') + if user_name_form.is_valid(): + request.user.first_name = user_name_form.cleaned_data['first_name'] + request.user.last_name = user_name_form.cleaned_data['last_name'] + request.user.save() + + if 'password_form' in request.POST: + password_form = PasswordChangeForm(request.user, request.POST) + if password_form.is_valid(): + user = password_form.save() + update_session_auth_hash(request, user) if up: preference_form = UserPreferenceForm(instance=up) else: preference_form = UserPreferenceForm() - user_name_form = UserNameForm(instance=request.user) - - return render(request, 'settings.html', {'preference_form': preference_form, 'user_name_form': user_name_form}) + return render(request, 'settings.html', {'preference_form': preference_form, 'user_name_form': user_name_form, 'password_form': password_form})