diff --git a/core/models.py b/core/models.py
index 18abe694..373fbfb4 100644
--- a/core/models.py
+++ b/core/models.py
@@ -63,6 +63,12 @@ class User(AbstractBaseUser, PermissionsMixin):
verbose_name = _('user')
verbose_name_plural = _('users')
+ def get_absolute_url(self):
+ """
+ This is needed for black magic powered UpdateView's children
+ """
+ return reverse('core:user_profile', kwargs={'user_id': self.pk})
+
def __str__(self):
return self.username
diff --git a/core/templates/core/base.html b/core/templates/core/base.html
index d7ff9f2a..cbb7b8a2 100644
--- a/core/templates/core/base.html
+++ b/core/templates/core/base.html
@@ -10,7 +10,7 @@
{% block header %}
{% if user.is_authenticated %}Hello, {{ user.username }}!{% endif %}
- - Register
+ - Register
- Login
- Logout
- Users
diff --git a/core/templates/core/user.html b/core/templates/core/user.html
deleted file mode 100644
index 707e9b75..00000000
--- a/core/templates/core/user.html
+++ /dev/null
@@ -1,32 +0,0 @@
-{% extends "core/base.html" %}
-
-{% block title %}
-{% if profile %}
- {{ profile.get_display_name }}'s profile
-{% endif %}
-{% if user_list %}
-User list
-{% endif %}
-{% endblock %}
-
-{% block content %}
-{% if profile %}
-User Profile
-Back to list
-{% if user.is_superuser or user.id == profile.id %}
-Edit
-{% endif %}
-You're seeing the profile of {{ profile.get_display_name }}
-{{ profile.nick_name }}
-{% endif %}
-
-{% if user_list %}
-User list
-
-{% endif %}
-{% endblock %}
-
diff --git a/core/templates/core/user_detail.html b/core/templates/core/user_detail.html
new file mode 100644
index 00000000..dcc4649f
--- /dev/null
+++ b/core/templates/core/user_detail.html
@@ -0,0 +1,26 @@
+{% extends "core/base.html" %}
+
+{% block title %}
+ {{ profile.get_display_name }}'s profile
+{% endblock %}
+
+{% block content %}
+User Profile
+Back to list
+
+{% if user.is_superuser or user.id == profile.id %}
+
+{% endif %}
+
+
+You're seeing the profile of {{ profile.get_full_name }}
+{{ profile.nick_name }}
+{{ profile.date_of_birth|date:"d/m/Y" }}
+
+
+{% endblock %}
+
+
diff --git a/core/templates/core/user_edit.html b/core/templates/core/user_edit.html
new file mode 100644
index 00000000..f12c56ec
--- /dev/null
+++ b/core/templates/core/user_edit.html
@@ -0,0 +1,14 @@
+{% extends "core/base.html" %}
+
+{% block content %}
+ Edit user profile
+
+{% endblock %}
+
+
+
+
diff --git a/core/templates/core/user_groups.html b/core/templates/core/user_groups.html
new file mode 100644
index 00000000..544d5b52
--- /dev/null
+++ b/core/templates/core/user_groups.html
@@ -0,0 +1,14 @@
+{% extends "core/base.html" %}
+
+{% block content %}
+ Edit user groups
+
+{% endblock %}
+
+
+
+
diff --git a/core/templates/core/user_list.html b/core/templates/core/user_list.html
new file mode 100644
index 00000000..7ce02182
--- /dev/null
+++ b/core/templates/core/user_list.html
@@ -0,0 +1,15 @@
+{% extends "core/base.html" %}
+
+{% block title %}
+User list
+{% endblock %}
+
+{% block content %}
+User list
+
+{% endblock %}
+
diff --git a/core/urls.py b/core/urls.py
index 4f3b2186..d3cddfb9 100644
--- a/core/urls.py
+++ b/core/urls.py
@@ -17,9 +17,10 @@ urlpatterns = [
url(r'^reset/done/$', password_reset_complete, name='password_reset_complete'),
url(r'^register$', register, name='register'),
- url(r'^user/$', user, name='user_list'),
- url(r'^user/(?P[0-9]+)/$', user, name='user_profile'),
- url(r'^user/(?P[0-9]+)/edit$', user_edit, name='user_edit'),
+ url(r'^user/$', UserListView.as_view(), name='user_list'),
+ url(r'^user/(?P[0-9]+)/$', UserView.as_view(), name='user_profile'),
+ url(r'^user/(?P[0-9]+)/edit$', UserUpdateProfileView.as_view(), name='user_edit'),
+ url(r'^user/(?P[0-9]+)/groups$', UserUpdateGroupsView.as_view(), name='user_groups'),
url(r'^page/$', PageListView.as_view(), name='page_list'),
url(r'^page/(?P[a-z0-9/]*)/$', PageView.as_view(), name='page'),
url(r'^page/(?P[a-z0-9/]*)/edit$', PageEditView.as_view(), name='page_edit'),
diff --git a/core/views/forms.py b/core/views/forms.py
index b4912e7f..7df4c019 100644
--- a/core/views/forms.py
+++ b/core/views/forms.py
@@ -1,6 +1,7 @@
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, UserChangeForm
from django import forms
from django.contrib.auth import logout, login, authenticate
+from django.forms import CheckboxSelectMultiple
import logging
from core.models import User, Page
@@ -20,39 +21,15 @@ class RegisteringForm(UserCreationForm):
user.save()
return user
-class LoginForm(AuthenticationForm):
- def login(self):
- u = authenticate(username=self.request.POST['username'],
- password=self.request.POST['password'])
- if u is not None:
- if u.is_active:
- login(self.request, u)
- logging.debug("Logging in "+str(u))
- else:
- raise forms.ValidationError(
- self.error_messages['invalid_login'],
- code='inactive',
- params={'username': self.username_field.verbose_name},
- )
- else:
- logging.debug("Login failed")
- raise forms.ValidationError(
- self.error_messages['invalid_login'],
- code='invalid_login',
- params={'username': self.username_field.verbose_name},
- )
-class UserEditForm(UserChangeForm):
+class UserGroupsForm(forms.ModelForm):
error_css_class = 'error'
required_css_class = 'required'
class Meta:
model = User
- fields = ('first_name', 'last_name', 'nick_name', 'email', 'date_of_birth', 'groups', 'user_permissions',)
-
- def __init__(self, *args, **kwargs):
- super(UserEditForm, self).__init__(*args, **kwargs)
-
- def clean_password(self):
- """We never handle password in this form"""
- return
+ fields = ['groups', 'user_permissions',]
+ widgets = {
+ 'groups': CheckboxSelectMultiple,
+ 'user_permissions': CheckboxSelectMultiple,
+ }
diff --git a/core/views/user.py b/core/views/user.py
index ecacfb6b..9daed52f 100644
--- a/core/views/user.py
+++ b/core/views/user.py
@@ -1,12 +1,12 @@
# This file contains all the views that concern the user model
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth import logout as auth_logout, views
-from django.contrib.auth.forms import PasswordChangeForm
from django.core.urlresolvers import reverse
-from django.core.mail import send_mail
+from django.views.generic.edit import UpdateView
+from django.views.generic import ListView, DetailView
import logging
-from core.views.forms import RegisteringForm, LoginForm, UserEditForm
+from core.views.forms import RegisteringForm, UserGroupsForm
from core.models import User
def login(request):
@@ -68,6 +68,7 @@ def password_reset_complete(request):
template_name="core/password_reset_complete.html",
)
+
def register(request):
context = {'title': 'Register a user'}
if request.method == 'POST':
@@ -86,38 +87,35 @@ def register(request):
context['form'] = form.as_p()
return render(request, "core/register.html", context)
-def user(request, user_id=None):
+class UserView(DetailView):
"""
Display a user's profile
"""
- context = {'title': 'View a user'}
- if user_id == None:
- context['user_list'] = User.objects.all
- return render(request, "core/user.html", context)
- context['profile'] = get_object_or_404(User, pk=user_id)
- return render(request, "core/user.html", context)
+ model = User
+ pk_url_kwarg = "user_id"
+ context_object_name = "profile"
-def user_edit(request, user_id=None):
+class UserListView(ListView):
"""
- This view allows a user, or the allowed users to modify a profile
+ Displays the user list
"""
- user_id = int(user_id)
- context = {'title': 'Edit a user'}
- if user_id is not None:
- user_id = int(user_id)
- if request.user.is_authenticated() and (request.user.pk == user_id or request.user.is_superuser):
- p = get_object_or_404(User, pk=user_id)
- if request.method == 'POST':
- f = UserEditForm(request.POST, instance=p)
- # Saving user
- if f.is_valid():
- f.save()
- context['tests'] = "USER_SAVED"
- else:
- context['tests'] = "USER_NOT_SAVED"
- else:
- f = UserEditForm(instance=p)
- context['profile'] = p
- context['user_form'] = f.as_p()
- return render(request, "core/edit_user.html", context)
- return user(request, user_id)
+ model = User
+
+class UserUpdateProfileView(UpdateView):
+ """
+ Edit a user's profile
+ """
+ model = User
+ pk_url_kwarg = "user_id"
+ template_name = "core/user_edit.html"
+ fields = ('first_name', 'last_name', 'nick_name', 'email', 'date_of_birth', )
+
+class UserUpdateGroupsView(UpdateView):
+ """
+ Edit a user's groups
+ """
+ model = User
+ pk_url_kwarg = "user_id"
+ template_name = "core/user_groups.html"
+ form_class = UserGroupsForm
+