Commit 7afb2276dc3c8194a081cec377cdce2ed7254c2d
1 parent
30f93fc0
Exists in
master
and in
5 other branches
Refactor da app de usuários (Adicionando Generic Views)
Showing
10 changed files
with
141 additions
and
145 deletions
Show diff stats
courses/forms.py
@@ -36,7 +36,7 @@ class CourseForm(forms.ModelForm): | @@ -36,7 +36,7 @@ class CourseForm(forms.ModelForm): | ||
36 | help_texts = { | 36 | help_texts = { |
37 | 'name': _('Course name'), | 37 | 'name': _('Course name'), |
38 | 'objectivies': _('Course objective'), | 38 | 'objectivies': _('Course objective'), |
39 | - 'content': _('COurse modules'), | 39 | + 'content': _('Course modules'), |
40 | 'max_students': _('Max number of students that a class can have'), | 40 | 'max_students': _('Max number of students that a class can have'), |
41 | 'init_register_date': _('Date that starts the registration period of the course (dd/mm/yyyy)'), | 41 | 'init_register_date': _('Date that starts the registration period of the course (dd/mm/yyyy)'), |
42 | 'end_register_date': _('Date that ends the registration period of the course (dd/mm/yyyy)'), | 42 | 'end_register_date': _('Date that ends the registration period of the course (dd/mm/yyyy)'), |
courses/templatetags/custom_filters.py
@@ -1,15 +0,0 @@ | @@ -1,15 +0,0 @@ | ||
1 | -from django import template | ||
2 | -import datetime | ||
3 | -from subscriptions.models import Subscribe | ||
4 | - | ||
5 | -register = template.Library() | ||
6 | - | ||
7 | -@register.filter(expects_localtime=True) | ||
8 | -def show_subscribe(course, user): | ||
9 | - actual = datetime.date.today() | ||
10 | - | ||
11 | - return course.init_register_date <= actual <= course.end_register_date and not Subscribe.objects.filter(user = user, course = course) | ||
12 | - | ||
13 | -@register.filter | ||
14 | -def subscribed(course, user): | ||
15 | - return Subscribe.objects.filter(user = user, course = course) | ||
16 | \ No newline at end of file | 0 | \ No newline at end of file |
courses/views.py
@@ -9,7 +9,6 @@ from django.core.urlresolvers import reverse_lazy | @@ -9,7 +9,6 @@ from django.core.urlresolvers import reverse_lazy | ||
9 | from django.utils.translation import ugettext_lazy as _ | 9 | from django.utils.translation import ugettext_lazy as _ |
10 | from slugify import slugify | 10 | from slugify import slugify |
11 | 11 | ||
12 | -from .serializers import CourseSerializer | ||
13 | from .forms import CourseForm, CategoryForm, ModuleForm | 12 | from .forms import CourseForm, CategoryForm, ModuleForm |
14 | from .models import Course, Module, Category | 13 | from .models import Course, Module, Category |
15 | 14 |
users/forms.py
@@ -23,16 +23,6 @@ class ProfileForm(forms.ModelForm): | @@ -23,16 +23,6 @@ class ProfileForm(forms.ModelForm): | ||
23 | 23 | ||
24 | class UserForm(forms.ModelForm): | 24 | class UserForm(forms.ModelForm): |
25 | 25 | ||
26 | - password = forms.CharField(label=_('Password'), widget=forms.PasswordInput) | ||
27 | - | ||
28 | - def save(self, commit=True): | ||
29 | - super(UserForm, self).save(commit=False) | ||
30 | - | ||
31 | - self.instance.set_password(self.cleaned_data['password']) | ||
32 | - self.instance.save() | ||
33 | - | ||
34 | - return self.instance | ||
35 | - | ||
36 | class Meta: | 26 | class Meta: |
37 | model = User | 27 | model = User |
38 | - fields = ['username', 'name', 'email', 'password', 'birth_date', 'city', 'state', 'gender', 'type_profile', 'cpf', 'phone', 'image', 'is_staff', 'is_active'] | ||
39 | \ No newline at end of file | 28 | \ No newline at end of file |
29 | + fields = ['username', 'name', 'email', 'birth_date', 'city', 'state', 'gender', 'type_profile', 'cpf', 'phone', 'image', 'is_staff', 'is_active'] | ||
40 | \ No newline at end of file | 30 | \ No newline at end of file |
users/templates/users/index.html
@@ -11,10 +11,10 @@ | @@ -11,10 +11,10 @@ | ||
11 | 11 | ||
12 | {% block sidebar %} | 12 | {% block sidebar %} |
13 | <div class="list-group"> | 13 | <div class="list-group"> |
14 | - <a href="{% url 'app:users:manage' %}" class="list-group-item"> | 14 | + <a href="{% url 'app:users:manage' %}" class="list-group-item active"> |
15 | {% trans 'System Users' %} | 15 | {% trans 'System Users' %} |
16 | </a> | 16 | </a> |
17 | - <a href="{% url 'app:users:create' %}" class="list-group-item active"> | 17 | + <a href="{% url 'app:users:create' %}" class="list-group-item"> |
18 | {% trans 'New Account' %} | 18 | {% trans 'New Account' %} |
19 | </a> | 19 | </a> |
20 | <a href="{% url 'app:send_mail' %}" class="list-group-item"> | 20 | <a href="{% url 'app:send_mail' %}" class="list-group-item"> |
users/templates/users/profile.html
@@ -28,9 +28,9 @@ | @@ -28,9 +28,9 @@ | ||
28 | </div> | 28 | </div> |
29 | <div class="col-sm-9"> | 29 | <div class="col-sm-9"> |
30 | <h4>{{ user }}</h4> | 30 | <h4>{{ user }}</h4> |
31 | - <span class="label label-info">{% if user.type_profile %}{{ user.type_profile }}{% else %} | 31 | + <span class="label label-info">{% if user.type_profile %}{{ user.get_type_profile_display }}{% else %} |
32 | {% trans 'Administrator' %} {% endif %}</span> | 32 | {% trans 'Administrator' %} {% endif %}</span> |
33 | - <span class="label label-primary">{{ user.gender }}</span> | 33 | + <span class="label label-primary">{{ user.get_gender_display }}</span> |
34 | <span class="label label-warning">{{ user.city }} / {{ user.state }}</span> | 34 | <span class="label label-warning">{{ user.city }} / {{ user.state }}</span> |
35 | <p> | 35 | <p> |
36 | <strong>{% trans 'Mail:' %} </strong> {{ user.email }} | 36 | <strong>{% trans 'Mail:' %} </strong> {{ user.email }} |
users/templates/users/update.html
@@ -12,10 +12,10 @@ | @@ -12,10 +12,10 @@ | ||
12 | 12 | ||
13 | {% block sidebar %} | 13 | {% block sidebar %} |
14 | <div class="list-group"> | 14 | <div class="list-group"> |
15 | - <a href="{% url 'app:users:manage' %}" class="list-group-item"> | 15 | + <a href="{% url 'app:users:manage' %}" class="list-group-item"> |
16 | {% trans 'System Users' %} | 16 | {% trans 'System Users' %} |
17 | </a> | 17 | </a> |
18 | - <a href="{% url 'app:users:create' %}" class="list-group-item active"> | 18 | + <a href="{% url 'app:users:create' %}" class="list-group-item"> |
19 | {% trans 'New Account' %} | 19 | {% trans 'New Account' %} |
20 | </a> | 20 | </a> |
21 | <a href="{% url 'app:send_mail' %}" class="list-group-item"> | 21 | <a href="{% url 'app:send_mail' %}" class="list-group-item"> |
users/templates/users/view.html
@@ -14,9 +14,15 @@ | @@ -14,9 +14,15 @@ | ||
14 | <a href="{% url 'app:users:manage' %}" class="list-group-item"> | 14 | <a href="{% url 'app:users:manage' %}" class="list-group-item"> |
15 | {% trans 'System Users' %} | 15 | {% trans 'System Users' %} |
16 | </a> | 16 | </a> |
17 | - <a href="{% url 'app:users:create' %}" class="list-group-item active"> | 17 | + <a href="{% url 'app:users:create' %}" class="list-group-item"> |
18 | {% trans 'New Account' %} | 18 | {% trans 'New Account' %} |
19 | </a> | 19 | </a> |
20 | + <a href="{% url 'app:users:view' acc.username %}" class="list-group-item active"> | ||
21 | + {% trans 'View User Account' %} | ||
22 | + </a> | ||
23 | + <a href="{% url 'app:users:update' acc.username %}" class="list-group-item"> | ||
24 | + {% trans 'Edit User Account' %} | ||
25 | + </a> | ||
20 | <a href="{% url 'app:send_mail' %}" class="list-group-item"> | 26 | <a href="{% url 'app:send_mail' %}" class="list-group-item"> |
21 | {% trans 'Send Mail' %} | 27 | {% trans 'Send Mail' %} |
22 | </a> | 28 | </a> |
users/urls.py
@@ -3,10 +3,10 @@ from django.conf.urls import url | @@ -3,10 +3,10 @@ from django.conf.urls import url | ||
3 | from . import views | 3 | from . import views |
4 | 4 | ||
5 | urlpatterns = [ | 5 | urlpatterns = [ |
6 | - url(r'^$', views.index, name='manage'), | ||
7 | - url(r'^criar/$', views.create, name='create'), | ||
8 | - url(r'^editar/([\w_-]+)/$', views.update, name='update'), | ||
9 | - url(r'^dados/([\w_-]+)/$', views.view, name='view'), | ||
10 | - url(r'^perfil/$', views.profile, name='profile'), | ||
11 | - url(r'^perfil/editar/$', views.edit_profile, name='edit_profile'), | 6 | + url(r'^$', views.Index.as_view(), name='manage'), |
7 | + url(r'^criar/$', views.Create.as_view(), name='create'), | ||
8 | + url(r'^editar/(?P<username>[\w_-]+)/$', views.Update.as_view(), name='update'), | ||
9 | + url(r'^dados/(?P<username>[\w_-]+)/$', views.View.as_view(), name='view'), | ||
10 | + url(r'^perfil/$', views.Profile.as_view(), name='profile'), | ||
11 | + url(r'^perfil/editar/$', views.EditProfile.as_view(), name='edit_profile'), | ||
12 | ] | 12 | ] |
13 | \ No newline at end of file | 13 | \ No newline at end of file |
users/views.py
1 | -from django.shortcuts import render, get_object_or_404, redirect | ||
2 | -from rolepermissions.shortcuts import assign_role | 1 | +from django.shortcuts import get_object_or_404 |
2 | +from django.views import generic | ||
3 | from django.contrib import messages | 3 | from django.contrib import messages |
4 | -from django.contrib.auth.decorators import login_required | 4 | +from rolepermissions.mixins import HasRoleMixin |
5 | +from django.contrib.auth.mixins import LoginRequiredMixin | ||
6 | +from django.core.urlresolvers import reverse_lazy | ||
5 | from django.utils.translation import ugettext_lazy as _ | 7 | from django.utils.translation import ugettext_lazy as _ |
8 | +from rolepermissions.shortcuts import assign_role | ||
6 | from .models import User | 9 | from .models import User |
7 | from .forms import UserForm, ProfileForm | 10 | from .forms import UserForm, ProfileForm |
8 | 11 | ||
9 | -@login_required | ||
10 | -def index(request): | ||
11 | - context = { | ||
12 | - 'users': User.objects.exclude(username = request.user.username) | ||
13 | - } | ||
14 | - | ||
15 | - return render(request, "users/index.html", context) | ||
16 | - | ||
17 | -@login_required | ||
18 | -def create(request): | ||
19 | - context = {} | ||
20 | - | ||
21 | - form = UserForm(request.POST or None, request.FILES or None) | ||
22 | - | ||
23 | - if form.is_valid(): | ||
24 | - user = form.save(commit = False) | ||
25 | - | ||
26 | - if user.type_profile == 2: | ||
27 | - assign_role(user, 'student') | ||
28 | - elif user.type_profile == 1: | ||
29 | - assign_role(user, 'professor') | ||
30 | - elif user.is_staff: | ||
31 | - assign_role(user, 'system_admin') | ||
32 | - | ||
33 | - user.save() | ||
34 | - | ||
35 | - messages.success(request, _('User created successfully!')) | ||
36 | - | ||
37 | - return redirect('app:users:manage') | ||
38 | - | ||
39 | - context['form'] = form | ||
40 | - | ||
41 | - return render(request, "users/create.html", context) | ||
42 | - | ||
43 | -@login_required | ||
44 | -def update(request, login): | ||
45 | - context = {} | ||
46 | - | ||
47 | - user = get_object_or_404(User, username = login) | ||
48 | - | ||
49 | - form = UserForm(request.POST or None, request.FILES or None, instance = user) | 12 | +class Index(HasRoleMixin, LoginRequiredMixin, generic.ListView): |
50 | 13 | ||
51 | - if form.is_valid(): | ||
52 | - new_user = form.save(commit = False) | ||
53 | - | ||
54 | - if user.type_profile == 2: | ||
55 | - assign_role(user, 'student') | ||
56 | - elif user.type_profile == 1: | ||
57 | - assign_role(user, 'professor') | ||
58 | - elif user.is_staff: | ||
59 | - assign_role(user, 'system_admin') | ||
60 | - | ||
61 | - new_user.save() | ||
62 | - | ||
63 | - messages.success(request, _('User edited successfully!')) | ||
64 | - | ||
65 | - return redirect('app:users:manage') | 14 | + allowed_roles = ['system_admin'] |
15 | + login_url = '/' | ||
16 | + redirect_field_name = 'next' | ||
17 | + template_name = 'users/index.html' | ||
18 | + context_object_name = 'users' | ||
19 | + paginate_by = 10 | ||
20 | + | ||
21 | + def get_queryset(self): | ||
22 | + users = User.objects.exclude(username = self.request.user.username) | ||
23 | + return users | ||
24 | + | ||
25 | +class Create(HasRoleMixin, LoginRequiredMixin, generic.edit.CreateView): | ||
26 | + | ||
27 | + allowed_roles = ['system_admin'] | ||
28 | + login_url = '/' | ||
29 | + redirect_field_name = 'next' | ||
30 | + template_name = 'users/create.html' | ||
31 | + form_class = UserForm | ||
32 | + context_object_name = 'acc' | ||
33 | + success_url = reverse_lazy('app:user:manage') | ||
34 | + | ||
35 | + def form_valid(self, form): | ||
36 | + self.object = form.save(commit = False) | ||
37 | + | ||
38 | + if self.object.type_profile == 2: | ||
39 | + assign_role(self.object, 'student') | ||
40 | + elif self.object.type_profile == 1: | ||
41 | + assign_role(self.object, 'professor') | ||
42 | + elif self.object.is_staff: | ||
43 | + assign_role(self.object, 'system_admin') | ||
44 | + | ||
45 | + self.object.save() | ||
46 | + | ||
47 | + messages.success(self.request, _('User created successfully!')) | ||
48 | + | ||
49 | + return super(Create, self).form_valid(form) | ||
50 | + | ||
51 | +class Update(HasRoleMixin, LoginRequiredMixin, generic.UpdateView): | ||
52 | + | ||
53 | + allowed_roles = ['system_admin'] | ||
54 | + login_url = '/' | ||
55 | + redirect_field_name = 'next' | ||
56 | + template_name = 'users/update.html' | ||
57 | + slug_field = 'username' | ||
58 | + slug_url_kwarg = 'username' | ||
59 | + context_object_name = 'acc' | ||
60 | + model = User | ||
61 | + form_class = UserForm | ||
62 | + success_url = reverse_lazy('app:users:manage') | ||
63 | + | ||
64 | + def form_valid(self, form): | ||
65 | + self.object = form.save(commit = False) | ||
66 | + | ||
67 | + if self.object.type_profile == 2: | ||
68 | + assign_role(self.object, 'student') | ||
69 | + elif self.object.type_profile == 1: | ||
70 | + assign_role(self.object, 'professor') | ||
71 | + elif self.object.is_staff: | ||
72 | + assign_role(self.object, 'system_admin') | ||
73 | + | ||
74 | + self.object.save() | ||
75 | + | ||
76 | + messages.success(self.request, _('User edited successfully!')) | ||
77 | + | ||
78 | + return super(Update, self).form_valid(form) | ||
66 | 79 | ||
67 | - context['form'] = form | ||
68 | - | ||
69 | - return render(request, "users/update.html", context) | ||
70 | - | ||
71 | -@login_required | ||
72 | -def view(request, login): | ||
73 | - context = {} | ||
74 | - | ||
75 | - user = get_object_or_404(User, username = login) | ||
76 | - | ||
77 | - context['acc'] = user | ||
78 | - | ||
79 | - return render(request, "users/view.html", context) | ||
80 | - | ||
81 | -@login_required | ||
82 | -def profile(request): | ||
83 | - context = { | ||
84 | - 'user': request.user | ||
85 | - } | ||
86 | - | ||
87 | - return render(request, "users/profile.html", context) | ||
88 | - | ||
89 | -@login_required | ||
90 | -def edit_profile(request): | ||
91 | - form = ProfileForm(request.POST or None, request.FILES or None, instance=request.user) | ||
92 | - | ||
93 | - context = {} | ||
94 | - | ||
95 | - if form.is_valid(): | ||
96 | - user = form.save(commit = False) | ||
97 | - | ||
98 | - if user.type_profile == 2: | ||
99 | - assign_role(user, 'student') | ||
100 | - elif user.type_profile == 1: | ||
101 | - assign_role(user, 'professor') | ||
102 | - elif user.is_staff: | ||
103 | - assign_role(user, 'system_admin') | ||
104 | - | ||
105 | - user.save() | ||
106 | - | ||
107 | - messages.success(request, _('Profile edited successfully!')) | ||
108 | - | ||
109 | - context['form'] = form | ||
110 | - | ||
111 | - return render(request, "users/edit_profile.html", context) | ||
112 | \ No newline at end of file | 80 | \ No newline at end of file |
81 | +class View(LoginRequiredMixin, generic.DetailView): | ||
82 | + | ||
83 | + login_url = '/' | ||
84 | + redirect_field_name = 'next' | ||
85 | + model = User | ||
86 | + context_object_name = 'acc' | ||
87 | + template_name = 'users/view.html' | ||
88 | + slug_field = 'username' | ||
89 | + slug_url_kwarg = 'username' | ||
90 | + | ||
91 | +class Profile(LoginRequiredMixin, generic.DetailView): | ||
92 | + | ||
93 | + login_url = '/' | ||
94 | + redirect_field_name = 'next' | ||
95 | + context_object_name = 'user' | ||
96 | + template_name = 'users/profile.html' | ||
97 | + | ||
98 | + def get_object(self): | ||
99 | + user = get_object_or_404(User, username = self.request.user.username) | ||
100 | + return user | ||
101 | + | ||
102 | +class EditProfile(LoginRequiredMixin, generic.UpdateView): | ||
103 | + | ||
104 | + login_url = '/' | ||
105 | + redirect_field_name = 'next' | ||
106 | + template_name = 'users/edit_profile.html' | ||
107 | + form_class = UserForm | ||
108 | + success_url = reverse_lazy('app:users:edit_profile') | ||
109 | + | ||
110 | + def get_object(self): | ||
111 | + user = get_object_or_404(User, username = self.request.user.username) | ||
112 | + return user | ||
113 | + | ||
114 | + def form_valid(self, form): | ||
115 | + self.object = form.save(commit = False) | ||
116 | + | ||
117 | + if self.object.type_profile == 2: | ||
118 | + assign_role(self.object, 'student') | ||
119 | + elif self.object.type_profile == 1: | ||
120 | + assign_role(self.object, 'professor') | ||
121 | + elif self.object.is_staff: | ||
122 | + assign_role(self.object, 'system_admin') | ||
123 | + | ||
124 | + self.object.save() | ||
125 | + | ||
126 | + messages.success(self.request, _('Profile edited successfully!')) | ||
127 | + | ||
128 | + return super(EditProfile, self).form_valid(form) | ||
113 | \ No newline at end of file | 129 | \ No newline at end of file |