Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
AE
Sith
Commits
48e3f88b
Commit
48e3f88b
authored
Nov 26, 2015
by
Skia
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improve user views
parent
385f91a9
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
120 additions
and
69 deletions
+120
-69
core/models.py
core/models.py
+6
-0
core/templates/core/base.html
core/templates/core/base.html
+1
-1
core/templates/core/user_detail.html
core/templates/core/user_detail.html
+26
-0
core/templates/core/user_edit.html
core/templates/core/user_edit.html
+14
-0
core/templates/core/user_groups.html
core/templates/core/user_groups.html
+14
-0
core/templates/core/user_list.html
core/templates/core/user_list.html
+15
-0
core/urls.py
core/urls.py
+4
-3
core/views/forms.py
core/views/forms.py
+7
-30
core/views/user.py
core/views/user.py
+33
-35
No files found.
core/models.py
View file @
48e3f88b
...
...
@@ -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
...
...
core/templates/core/base.html
View file @
48e3f88b
...
...
@@ -10,7 +10,7 @@
{% block header %}
{% if user.is_authenticated %}Hello, {{ user.username }}!{% endif %}
<ul>
<li><a
href=
""
>
Register
</a></li>
<li><a
href=
"
{% url 'core:register' %}
"
>
Register
</a></li>
<li><a
href=
"{% url 'core:login' %}"
>
Login
</a></li>
<li><a
href=
"{% url 'core:logout' %}"
>
Logout
</a></li>
<li><a
href=
"{% url 'core:user_list' %}"
>
Users
</a></li>
...
...
core/templates/core/user.html
→
core/templates/core/user
_detail
.html
View file @
48e3f88b
{% 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 %}
<h3>
User Profile
</h3>
<p><a
href=
"{% url 'core:user_list' %}"
>
Back to list
</a></p>
{% if user.is_superuser or user.id == profile.id %}
<p><a
href=
"{% url 'core:user_edit' profile.id %}"
>
Edit
</a></p>
{% endif %}
<p>
You're seeing the profile of
<strong>
{{ profile.get_display_name }}
</strong></p>
<p>
{{ profile.nick_name }}
</p>
{% endif %}
{% if user_list %}
<h3>
User list
</h3>
{% if user.is_superuser or user.id == profile.id %}
<ul>
{% for u in user_list %}
<li><a
href=
"{% url 'core:user_profile' u.id %}"
>
{{ u.get_display_name }}
</a></li>
{% endfor %}
<li><a
href=
"{% url 'core:user_edit' profile.id %}"
>
Edit
</a></li>
<li><a
href=
"{% url 'core:user_groups' profile.id %}"
>
Groups
</a></li>
</ul>
{% endif %}
<p>
You're seeing the profile of
<strong>
{{ profile.get_full_name }}
</strong><br/>
<strong>
{{ profile.nick_name }}
</strong><br/>
<em>
{{ profile.date_of_birth|date:"d/m/Y" }}
</em>
</p>
{% endblock %}
core/templates/core/user_edit.html
0 → 100644
View file @
48e3f88b
{% extends "core/base.html" %}
{% block content %}
<h2>
Edit user profile
</h2>
<form
action=
""
method=
"post"
>
{% csrf_token %}
{{ form.as_p }}
<p><input
type=
"submit"
value=
"Update"
/></p>
</form>
{% endblock %}
core/templates/core/user_groups.html
0 → 100644
View file @
48e3f88b
{% extends "core/base.html" %}
{% block content %}
<h2>
Edit user groups
</h2>
<form
action=
""
method=
"post"
>
{% csrf_token %}
{{ form.as_p }}
<p><input
type=
"submit"
value=
"Update"
/></p>
</form>
{% endblock %}
core/templates/core/user_list.html
0 → 100644
View file @
48e3f88b
{% extends "core/base.html" %}
{% block title %}
User list
{% endblock %}
{% block content %}
<h3>
User list
</h3>
<ul>
{% for u in user_list %}
<li><a
href=
"{% url 'core:user_profile' u.id %}"
>
{{ u.get_display_name }}
</a></li>
{% endfor %}
</ul>
{% endblock %}
core/urls.py
View file @
48e3f88b
...
...
@@ -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<user_id>[0-9]+)/$'
,
user
,
name
=
'user_profile'
),
url
(
r
'^user/(?P<user_id>[0-9]+)/edit$'
,
user_edit
,
name
=
'user_edit'
),
url
(
r
'^user/$'
,
UserListView
.
as_view
(),
name
=
'user_list'
),
url
(
r
'^user/(?P<user_id>[0-9]+)/$'
,
UserView
.
as_view
(),
name
=
'user_profile'
),
url
(
r
'^user/(?P<user_id>[0-9]+)/edit$'
,
UserUpdateProfileView
.
as_view
(),
name
=
'user_edit'
),
url
(
r
'^user/(?P<user_id>[0-9]+)/groups$'
,
UserUpdateGroupsView
.
as_view
(),
name
=
'user_groups'
),
url
(
r
'^page/$'
,
PageListView
.
as_view
(),
name
=
'page_list'
),
url
(
r
'^page/(?P<page_name>[a-z0-9/]*)/$'
,
PageView
.
as_view
(),
name
=
'page'
),
url
(
r
'^page/(?P<page_name>[a-z0-9/]*)/edit$'
,
PageEditView
.
as_view
(),
name
=
'page_edit'
),
...
...
core/views/forms.py
View file @
48e3f88b
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
User
EditForm
(
UserChange
Form
):
class
User
GroupsForm
(
forms
.
Model
Form
):
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
,
}
core/views/user.py
View file @
48e3f88b
# 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
,
UserEdit
Form
from
core.views.forms
import
RegisteringForm
,
UserGroups
Form
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
)
def
user_edit
(
request
,
user_id
=
None
):
"""
This view allows a user, or the allowed users to modify a profile
"""
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
pk_url_kwarg
=
"user_id"
context_object_name
=
"profile"
class
UserListView
(
ListView
):
"""
Displays the user list
"""
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment