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 | 36 | help_texts = { |
37 | 37 | 'name': _('Course name'), |
38 | 38 | 'objectivies': _('Course objective'), |
39 | - 'content': _('COurse modules'), | |
39 | + 'content': _('Course modules'), | |
40 | 40 | 'max_students': _('Max number of students that a class can have'), |
41 | 41 | 'init_register_date': _('Date that starts the registration period of the course (dd/mm/yyyy)'), |
42 | 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 | -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 | 0 | \ No newline at end of file |
courses/views.py
... | ... | @@ -9,7 +9,6 @@ from django.core.urlresolvers import reverse_lazy |
9 | 9 | from django.utils.translation import ugettext_lazy as _ |
10 | 10 | from slugify import slugify |
11 | 11 | |
12 | -from .serializers import CourseSerializer | |
13 | 12 | from .forms import CourseForm, CategoryForm, ModuleForm |
14 | 13 | from .models import Course, Module, Category |
15 | 14 | ... | ... |
users/forms.py
... | ... | @@ -23,16 +23,6 @@ class ProfileForm(forms.ModelForm): |
23 | 23 | |
24 | 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 | 26 | class Meta: |
37 | 27 | model = User |
38 | - fields = ['username', 'name', 'email', 'password', 'birth_date', 'city', 'state', 'gender', 'type_profile', 'cpf', 'phone', 'image', 'is_staff', 'is_active'] | |
39 | 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 | 30 | \ No newline at end of file | ... | ... |
users/templates/users/index.html
... | ... | @@ -11,10 +11,10 @@ |
11 | 11 | |
12 | 12 | {% block sidebar %} |
13 | 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 | 15 | {% trans 'System Users' %} |
16 | 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 | 18 | {% trans 'New Account' %} |
19 | 19 | </a> |
20 | 20 | <a href="{% url 'app:send_mail' %}" class="list-group-item"> | ... | ... |
users/templates/users/profile.html
... | ... | @@ -28,9 +28,9 @@ |
28 | 28 | </div> |
29 | 29 | <div class="col-sm-9"> |
30 | 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 | 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 | 34 | <span class="label label-warning">{{ user.city }} / {{ user.state }}</span> |
35 | 35 | <p> |
36 | 36 | <strong>{% trans 'Mail:' %} </strong> {{ user.email }} | ... | ... |
users/templates/users/update.html
... | ... | @@ -12,10 +12,10 @@ |
12 | 12 | |
13 | 13 | {% block sidebar %} |
14 | 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 | 16 | {% trans 'System Users' %} |
17 | 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 | 19 | {% trans 'New Account' %} |
20 | 20 | </a> |
21 | 21 | <a href="{% url 'app:send_mail' %}" class="list-group-item"> | ... | ... |
users/templates/users/view.html
... | ... | @@ -14,9 +14,15 @@ |
14 | 14 | <a href="{% url 'app:users:manage' %}" class="list-group-item"> |
15 | 15 | {% trans 'System Users' %} |
16 | 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 | 18 | {% trans 'New Account' %} |
19 | 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 | 26 | <a href="{% url 'app:send_mail' %}" class="list-group-item"> |
21 | 27 | {% trans 'Send Mail' %} |
22 | 28 | </a> | ... | ... |
users/urls.py
... | ... | @@ -3,10 +3,10 @@ from django.conf.urls import url |
3 | 3 | from . import views |
4 | 4 | |
5 | 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 | 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 | 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 | 7 | from django.utils.translation import ugettext_lazy as _ |
8 | +from rolepermissions.shortcuts import assign_role | |
6 | 9 | from .models import User |
7 | 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 | 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 | 129 | \ No newline at end of file | ... | ... |