Browse Source

Refactoring abonapp.views.peoples from function view to ClassBasedView

devel
bashmak 8 years ago
parent
commit
3ab48e8a19
  1. 2
      abonapp/templates/abonapp/peoples.html
  2. 2
      abonapp/urls_abon.py
  3. 84
      abonapp/views.py
  4. 2
      docs/install.md

2
abonapp/templates/abonapp/peoples.html

@ -167,6 +167,6 @@
</div> </div>
</div> </div>
{% include 'toolbar_page.html' with pag=peoples %}
{% include 'toolbar_page_cbv.html' %}
{% endblock %} {% endblock %}

2
abonapp/urls_abon.py

@ -3,7 +3,7 @@ from . import views
urlpatterns = [ urlpatterns = [
url(r'^$', views.peoples, name='people_list'),
url(r'^$', views.PeoplesListView.as_view(), name='people_list'),
url(r'^addabon$', views.addabon, name='add_abon'), url(r'^addabon$', views.addabon, name='add_abon'),
url(r'^services$', views.chgroup_tariff, name='ch_group_tariff'), url(r'^services$', views.chgroup_tariff, name='ch_group_tariff'),
url(r'^phonebook$', views.phonebook, name='phonebook'), url(r'^phonebook$', views.phonebook, name='phonebook'),

84
abonapp/views.py

@ -2,14 +2,16 @@
from json import dumps from json import dumps
from django.contrib.gis.shortcuts import render_to_text from django.contrib.gis.shortcuts import render_to_text
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.db import IntegrityError, ProgrammingError
from django.db import IntegrityError, ProgrammingError, transaction
from django.db.models import Count, Q, signals from django.db.models import Count, Q, signals
from django.db import transaction
from django.shortcuts import render, redirect, get_object_or_404, resolve_url from django.shortcuts import render, redirect, get_object_or_404, resolve_url
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.http import HttpResponse, HttpResponseBadRequest
from django.contrib import messages from django.contrib import messages
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.utils.decorators import method_decorator
from django.views.generic import ListView
from django.conf import settings
from statistics.models import StatCache from statistics.models import StatCache
from tariff_app.models import Tariff from tariff_app.models import Tariff
@ -24,48 +26,54 @@ from dialing_app.models import AsteriskCDR
from statistics.models import getModel from statistics.models import getModel
from guardian.shortcuts import get_objects_for_user, assign_perm from guardian.shortcuts import get_objects_for_user, assign_perm
from guardian.decorators import permission_required_or_403 as permission_required from guardian.decorators import permission_required_or_403 as permission_required
from djing.global_base_views import OrderingMixin
@login_required
@mydefs.only_admins
def peoples(request, gid):
abon_group = get_object_or_404(models.AbonGroup, pk=gid)
if not request.user.has_perm('abonapp.can_view_abongroup', abon_group):
raise PermissionDenied
street_id = mydefs.safe_int(request.GET.get('street'))
peoples_list = models.Abon.objects.select_related('group', 'street')
if street_id > 0:
peoples_list = peoples_list.filter(group=abon_group, street=street_id)
else:
peoples_list = peoples_list.filter(group=abon_group)
PAGINATION_ITEMS_PER_PAGE = getattr(settings, 'PAGINATION_ITEMS_PER_PAGE', 10)
# фильтр
dr, field = mydefs.order_helper(request)
if field:
peoples_list = peoples_list.order_by(field)
try:
peoples_list = mydefs.pag_mn(request, peoples_list)
for abon in peoples_list:
if abon.ip_address is not None:
try:
abon.stat_cache = StatCache.objects.get(ip=abon.ip_address)
except StatCache.DoesNotExist:
pass
@method_decorator([login_required, mydefs.only_admins], name='dispatch')
class PeoplesListView(ListView, OrderingMixin):
context_object_name = 'peoples'
template_name = 'abonapp/peoples.html'
paginate_by = PAGINATION_ITEMS_PER_PAGE
http_method_names = ['get']
except mydefs.LogicError as e:
messages.warning(request, e)
def get_queryset(self):
street_id = mydefs.safe_int(self.request.GET.get('street'))
gid = mydefs.safe_int(self.kwargs.get('gid'))
peoples_list = models.Abon.objects.select_related('group', 'street')
if street_id > 0:
peoples_list = peoples_list.filter(group__pk=gid, street=street_id)
else:
peoples_list = peoples_list.filter(group__pk=gid)
try:
for abon in peoples_list:
if abon.ip_address is not None:
try:
abon.stat_cache = StatCache.objects.get(ip=abon.ip_address)
except StatCache.DoesNotExist:
pass
except mydefs.LogicError as e:
messages.warning(self.request, e)
return peoples_list
def get_context_data(self, **kwargs):
gid = mydefs.safe_int(self.kwargs.get('gid'))
if gid == 0:
return HttpResponseBadRequest('group id is broken')
abon_group = get_object_or_404(models.AbonGroup, pk=gid)
if not self.request.user.has_perm('abonapp.can_view_abongroup', abon_group):
raise PermissionDenied
streets = models.AbonStreet.objects.filter(group=gid)
context = super(PeoplesListView, self).get_context_data(**kwargs)
return render(request, 'abonapp/peoples.html', {
'peoples': peoples_list,
'abon_group': get_object_or_404(models.AbonGroup, pk=gid),
'streets': streets,
'street_id': street_id,
'dir': dr,
'order_by': request.GET.get('order_by')
})
context['streets'] = models.AbonStreet.objects.filter(group=gid)
context['street_id'] = mydefs.safe_int(self.request.GET.get('street'))
context['abon_group'] = abon_group
return context
@login_required @login_required

2
docs/install.md

@ -12,7 +12,7 @@
Затем установим зависимости Затем установим зависимости
``` ```
# dnf -y install python3 python3-devel python3-pip python3-pillow mariadb mariadb-devel uwsgi nginx uwsgi-plugin-python3 redis net-snmp net-snmp-libs net-snmp-utils net-snmp-devel net-snmp-python git redhat-rpm-config
# dnf -y install python3 python3-devel python3-pip python3-pillow mariadb mariadb-devel uwsgi nginx uwsgi-plugin-python3 net-snmp net-snmp-libs net-snmp-utils net-snmp-devel net-snmp-python git redhat-rpm-config
``` ```
Лучше чтоб версия python по умолчанию была третья: Лучше чтоб версия python по умолчанию была третья:

Loading…
Cancel
Save