Browse Source

Refactoring abonhome view, renamed to AbonHomeUpdateView

devel
Dmitry 8 years ago
parent
commit
111bf2700c
  1. 2
      abonapp/forms.py
  2. 2
      abonapp/urls.py
  3. 131
      abonapp/views.py

2
abonapp/forms.py

@ -58,7 +58,7 @@ class AbonForm(forms.ModelForm):
class Meta:
model = models.Abon
fields = ['username', 'telephone', 'fio', 'group', 'description', 'street', 'house', 'is_active']
fields = ['username', 'telephone', 'fio', 'group', 'description', 'street', 'house', 'is_active', 'ip_address']
widgets = {
'fio': forms.TextInput(attrs={
'placeholder': _('fio'),

2
abonapp/urls.py

@ -5,7 +5,7 @@ from . import views
app_name = 'abonapp'
subscriber_patterns = [
url(r'^$', views.abonhome, name='abon_home'),
url(r'^$', views.AbonHomeUpdateView.as_view(), name='abon_home'),
url(r'^services/$', views.abon_services, name='abon_services'),
url(r'^amount/$', views.abonamount, name='abon_amount'),
url(r'^debts/$', views.DebtsListView.as_view(), name='abon_debts'),

131
abonapp/views.py

@ -268,66 +268,83 @@ def abon_services(request, gid, uname):
})
@login_required
@mydefs.only_admins
def abonhome(request, gid, uname):
abon = get_object_or_404(models.Abon, username=uname)
group = get_object_or_404(Group, pk=gid)
if not request.user.has_perm('group_app.can_view_group', group):
raise PermissionDenied
frm = None
passw = None
try:
if request.method == 'POST':
if not request.user.has_perm('abonapp.change_abon'):
raise PermissionDenied
frm = forms.AbonForm(request.POST, instance=abon)
if frm.is_valid():
newip = request.POST.get('ip')
if newip:
abon.ip_address = newip
abon = frm.save()
res = abon.sync_with_nas(created=False)
if isinstance(res, Exception):
messages.warning(request, res)
messages.success(request, _('edit abon success msg'))
else:
messages.warning(request, _('fix form errors'))
else:
passw = models.AbonRawPassword.objects.get(account=abon).passw_text
frm = forms.AbonForm(instance=abon, initial={'password': passw})
if abon.device is None:
messages.warning(request, _('User device was not found'))
except mydefs.LogicError as e:
messages.error(request, e)
passw = models.AbonRawPassword.objects.get(account=abon).passw_text
frm = forms.AbonForm(instance=abon, initial={'password': passw})
@method_decorator([login_required, mydefs.only_admins], name='dispatch')
@method_decorator(permission_required('abonapp.change_abon'), name='post')
class AbonHomeUpdateView(UpdateView):
model = models.Abon
form_class = forms.AbonForm
slug_field = 'username'
slug_url_kwarg = 'uname'
template_name = 'abonapp/editAbon.html'
context_object_name = 'abon'
group = None
except (NasFailedResult, NasNetworkError) as e:
messages.error(request, e)
except models.AbonRawPassword.DoesNotExist:
messages.warning(request, _('User has not have password, and cannot login'))
except mydefs.MultipleException as errs:
for err in errs.err_list:
messages.error(request, err)
def dispatch(self, request, *args, **kwargs):
try:
return super(AbonHomeUpdateView, self).dispatch(request, *args, **kwargs)
except mydefs.LogicError as e:
messages.error(request, e)
except (NasFailedResult, NasNetworkError) as e:
messages.error(request, e)
except models.AbonRawPassword.DoesNotExist:
messages.warning(request, _('User has not have password, and cannot login'))
except mydefs.MultipleException as errs:
for err in errs.err_list:
messages.error(request, err)
return self.render_to_response(self.get_context_data())
def get_object(self, queryset=None):
gid = self.kwargs.get('gid')
self.group = get_object_or_404(Group, pk=gid)
if not self.request.user.has_perm('group_app.can_view_group', self.group):
raise PermissionDenied
return super(AbonHomeUpdateView, self).get_object(queryset)
def form_valid(self, form):
r = super(AbonHomeUpdateView, self).form_valid(form)
abon = self.object
res = abon.sync_with_nas(created=False)
if isinstance(res, Exception):
messages.warning(self.request, res)
messages.success(self.request, _('edit abon success msg'))
return r
def form_invalid(self, form):
messages.warning(self.request, _('fix form errors'))
return super(AbonHomeUpdateView, self).form_invalid(form)
def get(self, request, *args, **kwargs):
r = super(AbonHomeUpdateView, self).get(request, *args, **kwargs)
abon = self.object
if abon.device is None:
messages.warning(request, _('User device was not found'))
return r
if request.user.has_perm('abonapp.change_abon'):
return render(request, 'abonapp/editAbon.html', {
'form': frm or forms.AbonForm(instance=abon, initial={'password': passw}),
'abon': abon,
'group': group,
'ip': abon.ip_address,
def get_initial(self):
abon = self.object
passw = models.AbonRawPassword.objects.get(account=abon).passw_text
return {
'password': passw
}
def get_context_data(self, **kwargs):
abon = self.object
dev = getattr(abon, 'device')
context = {
'group': self.group,
'is_bad_ip': getattr(abon, 'is_bad_ip', False),
'device': abon.device,
'dev_ports': DevPort.objects.filter(device=abon.device) if abon.device else None
})
else:
return render(request, 'abonapp/viewAbon.html', {
'abon': abon,
'group': group,
'ip': abon.ip_address,
'passw': passw
})
'device': dev,
'dev_ports': DevPort.objects.filter(device=dev) if dev else None
}
context.update(kwargs)
return super(AbonHomeUpdateView, self).get_context_data(**context)
def get_success_url(self):
abon = self.object
return resolve_url('abonapp:abon_home',
gid=getattr(abon.group, 'pk', 0),
uname=abon.username
)
@transaction.atomic

Loading…
Cancel
Save