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