users can update their password in their profile
This commit is contained in:
parent
f420dd98ac
commit
2f3d75fc3e
4 changed files with 72 additions and 11 deletions
|
@ -19,13 +19,38 @@ class TestViews(TestCase):
|
||||||
response = self.client.get(reverse('profile'))
|
response = self.client.get(reverse('profile'))
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
response = self.client.post(reverse('profile'), {
|
response = self.client.post(reverse('profile'), {
|
||||||
|
'update-profile': '',
|
||||||
'first_name': 'newfirstname',
|
'first_name': 'newfirstname',
|
||||||
'notifications': User.NOTIFICATIONS_OTHERS,
|
'notifications': User.NOTIFICATIONS_OTHERS,
|
||||||
}, follow=True)
|
}, follow=True)
|
||||||
self.assertRedirects(response, reverse('profile'))
|
self.assertRedirects(response, reverse('profile'))
|
||||||
self.assertContains(response, 'successfully')
|
self.assertContains(response, 'Profile updated successfully')
|
||||||
user = User.objects.get(username='admin')
|
user = User.objects.get(username='admin')
|
||||||
self.assertEqual(user.first_name, 'newfirstname')
|
self.assertEqual(user.first_name, 'newfirstname')
|
||||||
|
with self.settings(EXTERNAL_AUTH=True):
|
||||||
|
response = self.client.get(reverse('profile'))
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertNotContains(response, 'update-password')
|
||||||
|
response = self.client.post(reverse('profile'), {
|
||||||
|
'update-password': '',
|
||||||
|
'old_password': 'admin',
|
||||||
|
'new_password1': 'newpassword',
|
||||||
|
'new_password2': 'newpassword',
|
||||||
|
}, follow=True)
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertNotContains(response, 'successfully')
|
||||||
|
user = User.objects.get(username='admin')
|
||||||
|
self.assertFalse(user.check_password('newpassword'))
|
||||||
|
response = self.client.post(reverse('profile'), {
|
||||||
|
'update-password': '',
|
||||||
|
'old_password': 'admin',
|
||||||
|
'new_password1': 'newpassword',
|
||||||
|
'new_password2': 'newpassword',
|
||||||
|
}, follow=True)
|
||||||
|
self.assertRedirects(response, reverse('login')+'?next='+reverse('profile'))
|
||||||
|
self.assertContains(response, 'Password updated successfully')
|
||||||
|
user = User.objects.get(username='admin')
|
||||||
|
self.assertTrue(user.check_password('newpassword'))
|
||||||
|
|
||||||
# Users
|
# Users
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ from django.conf.urls import url, include
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
# Profile
|
# Profile
|
||||||
url(r'^profile$', 'accounts.views.profile', name='profile'),
|
url(r'^profile/$', 'accounts.views.profile', name='profile'),
|
||||||
# Users
|
# Users
|
||||||
url(r'^admin/users/$', 'accounts.views.user_list', name='list-user'),
|
url(r'^admin/users/$', 'accounts.views.user_list', name='list-user'),
|
||||||
url(r'^admin/users/add/$', 'accounts.views.user_edit', name='add-user'),
|
url(r'^admin/users/add/$', 'accounts.views.user_edit', name='add-user'),
|
||||||
|
|
|
@ -6,6 +6,7 @@ from django.contrib import messages
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.contrib.auth.forms import PasswordChangeForm
|
||||||
|
|
||||||
from django.http import Http404, HttpResponse, JsonResponse
|
from django.http import Http404, HttpResponse, JsonResponse
|
||||||
|
|
||||||
|
@ -21,13 +22,31 @@ from accounts.forms import *
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def profile(request):
|
def profile(request):
|
||||||
form = ProfileForm(request.POST or None, instance=request.user)
|
profileform = None
|
||||||
if request.method == 'POST' and form.is_valid():
|
passwordform = None
|
||||||
form.save()
|
|
||||||
messages.success(request, 'Profile updated successfully.')
|
if request.method == 'POST':
|
||||||
return redirect('profile')
|
if 'update-profile' in request.POST:
|
||||||
|
profileform = ProfileForm(request.POST, instance=request.user)
|
||||||
|
if profileform.is_valid():
|
||||||
|
profileform.save()
|
||||||
|
messages.success(request, 'Profile updated successfully.')
|
||||||
|
return redirect('profile')
|
||||||
|
elif 'update-password' in request.POST and not settings.EXTERNAL_AUTH:
|
||||||
|
passwordform = PasswordChangeForm(user=request.user, data=request.POST)
|
||||||
|
if passwordform.is_valid():
|
||||||
|
passwordform.save()
|
||||||
|
messages.success(request, 'Password updated successfully.')
|
||||||
|
return redirect('profile')
|
||||||
|
|
||||||
|
if not profileform:
|
||||||
|
profileform = ProfileForm(None, instance=request.user)
|
||||||
|
if not passwordform and not settings.EXTERNAL_AUTH:
|
||||||
|
passwordform = PasswordChangeForm(None)
|
||||||
|
|
||||||
return render(request, 'accounts/profile.html', {
|
return render(request, 'accounts/profile.html', {
|
||||||
'form': form,
|
'profileform': profileform,
|
||||||
|
'passwordform': passwordform,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,19 +13,36 @@
|
||||||
|
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h3>Your profile</h3>
|
<h3>Update profile</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<form method="post" class="col-md-4" role="form">
|
<form method="post" class="col-md-4" role="form">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% bootstrap_form form %}
|
{% bootstrap_form profileform %}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<button type="submit" class="btn btn-primary">Update</button>
|
<button type="submit" name='update-profile' class="btn btn-primary">Update</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% if passwordform %}
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h3>Update password</h3>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<form method="post" class="col-md-4" role="form">
|
||||||
|
{% csrf_token %}
|
||||||
|
{% bootstrap_form passwordform %}
|
||||||
|
<div class="form-group">
|
||||||
|
<button type="submit" name='update-password' class="btn btn-primary">Update</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h3>Your groups</h3>
|
<h3>Your groups</h3>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue