Commit 7afb2276dc3c8194a081cec377cdce2ed7254c2d

Authored by Zambom
1 parent 30f93fc0

Refactor da app de usuários (Adicionando Generic Views)

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>
@@ -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