From 60daaee2040e3b27c326781afdbb0e863b4ab7b2 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 9 May 2016 12:20:46 -0400 Subject: [PATCH] Converted IPAM VRF, Aggregate add/edit/delete views to CBVs --- netbox/ipam/urls.py | 12 +- netbox/ipam/views.py | 175 +++++--------------- netbox/templates/ipam/aggregate_delete.html | 4 +- netbox/templates/ipam/aggregate_edit.html | 10 +- netbox/templates/ipam/vrf_delete.html | 8 +- netbox/templates/ipam/vrf_edit.html | 10 +- 6 files changed, 62 insertions(+), 157 deletions(-) diff --git a/netbox/ipam/urls.py b/netbox/ipam/urls.py index da6a0b6ca..4cbf811e6 100644 --- a/netbox/ipam/urls.py +++ b/netbox/ipam/urls.py @@ -4,22 +4,22 @@ from . import views urlpatterns = [ url(r'^vrfs/$', views.VRFListView.as_view(), name='vrf_list'), - url(r'^vrfs/add/$', views.vrf_add, name='vrf_add'), + url(r'^vrfs/add/$', views.VRFAddView.as_view(), name='vrf_add'), url(r'^vrfs/import/$', views.VRFBulkImportView.as_view(), name='vrf_import'), url(r'^vrfs/edit/$', views.VRFBulkEditView.as_view(), name='vrf_bulk_edit'), url(r'^vrfs/delete/$', views.VRFBulkDeleteView.as_view(), name='vrf_bulk_delete'), url(r'^vrfs/(?P\d+)/$', views.vrf, name='vrf'), - url(r'^vrfs/(?P\d+)/edit/$', views.vrf_edit, name='vrf_edit'), - url(r'^vrfs/(?P\d+)/delete/$', views.vrf_delete, name='vrf_delete'), + url(r'^vrfs/(?P\d+)/edit/$', views.VRFEditView.as_view(), name='vrf_edit'), + url(r'^vrfs/(?P\d+)/delete/$', views.VRFDeleteView.as_view(), name='vrf_delete'), url(r'^aggregates/$', views.AggregateListView.as_view(), name='aggregate_list'), - url(r'^aggregates/add/$', views.aggregate_add, name='aggregate_add'), + url(r'^aggregates/add/$', views.AggregateAddView.as_view(), name='aggregate_add'), url(r'^aggregates/import/$', views.AggregateBulkImportView.as_view(), name='aggregate_import'), url(r'^aggregates/edit/$', views.AggregateBulkEditView.as_view(), name='aggregate_bulk_edit'), url(r'^aggregates/delete/$', views.AggregateBulkDeleteView.as_view(), name='aggregate_bulk_delete'), url(r'^aggregates/(?P\d+)/$', views.aggregate, name='aggregate'), - url(r'^aggregates/(?P\d+)/edit/$', views.aggregate_edit, name='aggregate_edit'), - url(r'^aggregates/(?P\d+)/delete/$', views.aggregate_delete, name='aggregate_delete'), + url(r'^aggregates/(?P\d+)/edit/$', views.AggregateEditView.as_view(), name='aggregate_edit'), + url(r'^aggregates/(?P\d+)/delete/$', views.AggregateDeleteView.as_view(), name='aggregate_delete'), url(r'^prefixes/$', views.PrefixListView.as_view(), name='prefix_list'), url(r'^prefixes/add/$', views.prefix_add, name='prefix_add'), diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 96b4bc699..4beb32473 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -15,17 +15,18 @@ from dcim.models import Device from utilities.error_handlers import handle_protectederror from utilities.forms import ConfirmationForm from utilities.paginator import EnhancedPaginator -from utilities.views import BulkImportView, BulkEditView, BulkDeleteView, ObjectListView +from utilities.views import BulkImportView, BulkEditView, BulkDeleteView, ObjectListView, ObjectAddView,\ + ObjectEditView, ObjectDeleteView from .filters import AggregateFilter, PrefixFilter, IPAddressFilter, VLANFilter, VRFFilter -from .forms import AggregateForm, AggregateImportForm, AggregateBulkEditForm, AggregateBulkDeleteForm, \ - AggregateFilterForm, PrefixForm, PrefixImportForm, PrefixBulkEditForm, PrefixBulkDeleteForm, PrefixFilterForm, \ - IPAddressForm, IPAddressImportForm, IPAddressBulkEditForm, IPAddressBulkDeleteForm, IPAddressFilterForm, VLANForm, \ - VLANImportForm, VLANBulkEditForm, VLANBulkDeleteForm, VRFForm, VRFImportForm, VRFBulkEditForm, VRFBulkDeleteForm, \ +from .forms import AggregateForm, AggregateImportForm, AggregateBulkEditForm, AggregateBulkDeleteForm,\ + AggregateFilterForm, PrefixForm, PrefixImportForm, PrefixBulkEditForm, PrefixBulkDeleteForm, PrefixFilterForm,\ + IPAddressForm, IPAddressImportForm, IPAddressBulkEditForm, IPAddressBulkDeleteForm, IPAddressFilterForm, VLANForm,\ + VLANImportForm, VLANBulkEditForm, VLANBulkDeleteForm, VRFForm, VRFImportForm, VRFBulkEditForm, VRFBulkDeleteForm,\ VLANFilterForm from .models import VRF, Aggregate, Prefix, VLAN -from .tables import AggregateTable, AggregateBulkEditTable, PrefixTable, PrefixBriefTable, PrefixBulkEditTable, \ - IPAddress, IPAddressBriefTable, IPAddressTable, IPAddressBulkEditTable, VLANTable, VLANBulkEditTable, VRFTable, \ +from .tables import AggregateTable, AggregateBulkEditTable, PrefixTable, PrefixBriefTable, PrefixBulkEditTable,\ + IPAddress, IPAddressBriefTable, IPAddressTable, IPAddressBulkEditTable, VLANTable, VLANBulkEditTable, VRFTable,\ VRFBulkEditTable @@ -69,74 +70,26 @@ def vrf(request, pk): }) -@permission_required('ipam.add_vrf') -def vrf_add(request): - - if request.method == 'POST': - form = VRFForm(request.POST) - if form.is_valid(): - vrf = form.save() - messages.success(request, "Added new VRF: {0}".format(vrf)) - if '_addanother' in request.POST: - return redirect('ipam:vrf_add') - else: - return redirect('ipam:vrf', pk=vrf.pk) - - else: - form = VRFForm() - - return render(request, 'ipam/vrf_edit.html', { - 'form': form, - 'cancel_url': reverse('ipam:vrf_list'), - }) +class VRFAddView(PermissionRequiredMixin, ObjectAddView): + permission_required = 'ipam.add_vrf' + model = VRF + form_class = VRFForm + template_name = 'ipam/vrf_edit.html' + cancel_url = 'ipam:vrf_list' -@permission_required('ipam.change_vrf') -def vrf_edit(request, pk): - - vrf = get_object_or_404(VRF, pk=pk) - - if request.method == 'POST': - form = VRFForm(request.POST, instance=vrf) - if form.is_valid(): - vrf = form.save() - messages.success(request, "Modified VRF {0}".format(vrf)) - return redirect('ipam:vrf', pk=vrf.pk) - - else: - form = VRFForm(instance=vrf) - - return render(request, 'ipam/vrf_edit.html', { - 'vrf': vrf, - 'form': form, - 'cancel_url': reverse('ipam:vrf', kwargs={'pk': vrf.pk}), - }) +class VRFEditView(PermissionRequiredMixin, ObjectEditView): + permission_required = 'ipam.change_vrf' + model = VRF + form_class = VRFForm + template_name = 'ipam/vrf_edit.html' -@permission_required('ipam.delete_vrf') -def vrf_delete(request, pk): - - vrf = get_object_or_404(VRF, pk=pk) - - if request.method == 'POST': - form = ConfirmationForm(request.POST) - if form.is_valid(): - try: - vrf.delete() - messages.success(request, "VRF {0} has been deleted".format(vrf)) - return redirect('ipam:vrf_list') - except ProtectedError, e: - handle_protectederror(vrf, request, e) - return redirect('ipam:vrf', pk=vrf.pk) - - else: - form = ConfirmationForm() - - return render(request, 'ipam/vrf_delete.html', { - 'vrf': vrf, - 'form': form, - 'cancel_url': reverse('ipam:vrf', kwargs={'pk': vrf.pk}) - }) +class VRFDeleteView(PermissionRequiredMixin, ObjectDeleteView): + permission_required = 'ipam.delete_vrf' + model = VRF + template_name = 'ipam/vrf_delete.html' + redirect_url = 'ipam:vrf_list' class VRFBulkImportView(PermissionRequiredMixin, BulkImportView): @@ -211,74 +164,26 @@ def aggregate(request, pk): }) -@permission_required('ipam.add_aggregate') -def aggregate_add(request): - - if request.method == 'POST': - form = AggregateForm(request.POST) - if form.is_valid(): - aggregate = form.save() - messages.success(request, "Added new aggregate: {0}".format(aggregate.prefix)) - if '_addanother' in request.POST: - return redirect('ipam:aggregate_add') - else: - return redirect('ipam:aggregate', pk=aggregate.pk) - - else: - form = AggregateForm() - - return render(request, 'ipam/aggregate_edit.html', { - 'form': form, - 'cancel_url': reverse('ipam:aggregate_list'), - }) +class AggregateAddView(PermissionRequiredMixin, ObjectAddView): + permission_required = 'ipam.add_aggregate' + model = Aggregate + form_class = AggregateForm + template_name = 'ipam/aggregate_edit.html' + cancel_url = 'ipam:aggregate_list' -@permission_required('ipam.change_aggregate') -def aggregate_edit(request, pk): - - aggregate = get_object_or_404(Aggregate, pk=pk) - - if request.method == 'POST': - form = AggregateForm(request.POST, instance=aggregate) - if form.is_valid(): - aggregate = form.save() - messages.success(request, "Modified aggregate {0}".format(aggregate.prefix)) - return redirect('ipam:aggregate', pk=aggregate.pk) - - else: - form = AggregateForm(instance=aggregate) - - return render(request, 'ipam/aggregate_edit.html', { - 'aggregate': aggregate, - 'form': form, - 'cancel_url': reverse('ipam:aggregate', kwargs={'pk': aggregate.pk}), - }) +class AggregateEditView(PermissionRequiredMixin, ObjectEditView): + permission_required = 'ipam.change_aggregate' + model = Aggregate + form_class = AggregateForm + template_name = 'ipam/aggregate_edit.html' -@permission_required('ipam.delete_aggregate') -def aggregate_delete(request, pk): - - aggregate = get_object_or_404(Aggregate, pk=pk) - - if request.method == 'POST': - form = ConfirmationForm(request.POST) - if form.is_valid(): - try: - aggregate.delete() - messages.success(request, "Aggregate {0} has been deleted".format(aggregate)) - return redirect('ipam:aggregate_list') - except ProtectedError, e: - handle_protectederror(aggregate, request, e) - return redirect('ipam:aggregate', pk=aggregate.pk) - - else: - form = ConfirmationForm() - - return render(request, 'ipam/aggregate_delete.html', { - 'aggregate': aggregate, - 'form': form, - 'cancel_url': reverse('ipam:aggregate', kwargs={'pk': aggregate.pk}) - }) +class AggregateDeleteView(PermissionRequiredMixin, ObjectDeleteView): + permission_required = 'ipam.delete_aggregate' + model = Aggregate + template_name = 'ipam/aggregate_delete.html' + redirect_url = 'ipam:aggregate_list' class AggregateBulkImportView(PermissionRequiredMixin, BulkImportView): diff --git a/netbox/templates/ipam/aggregate_delete.html b/netbox/templates/ipam/aggregate_delete.html index 8f0c9635f..34d03f678 100644 --- a/netbox/templates/ipam/aggregate_delete.html +++ b/netbox/templates/ipam/aggregate_delete.html @@ -1,8 +1,8 @@ {% extends 'utilities/confirmation_form.html' %} {% load form_helpers %} -{% block title %}Delete aggregate {{ aggregate }}?{% endblock %} +{% block title %}Delete aggregate {{ obj }}?{% endblock %} {% block message %} -

Are you sure you want to delete this aggregate?

+

Are you sure you want to delete {{ obj }}?

{% endblock %} diff --git a/netbox/templates/ipam/aggregate_edit.html b/netbox/templates/ipam/aggregate_edit.html index 36abbd33e..62920aef4 100644 --- a/netbox/templates/ipam/aggregate_edit.html +++ b/netbox/templates/ipam/aggregate_edit.html @@ -1,11 +1,11 @@ {% extends '_base.html' %} {% load form_helpers %} -{% block title %}Editing aggregate {{ aggregate }}{% endblock %} +{% block title %}{% if obj %}Editing aggregate {{ obj }}{% else %}Add a new aggregate{% endif %}{% endblock %} {% block content %} -{% if aggregate %} -

{{ aggregate }}

+{% if obj %} +

{{ obj }}

{% else %}

Add an Aggregate

{% endif %} @@ -32,9 +32,9 @@
- {% if aggregate %} + {% if obj %} - Cancel + Cancel {% else %} diff --git a/netbox/templates/ipam/vrf_delete.html b/netbox/templates/ipam/vrf_delete.html index e62a36916..96d5bf226 100644 --- a/netbox/templates/ipam/vrf_delete.html +++ b/netbox/templates/ipam/vrf_delete.html @@ -1,20 +1,20 @@ {% extends 'utilities/confirmation_form.html' %} {% load form_helpers %} -{% block title %}Delete VRF {{ vrf }}?{% endblock %} +{% block title %}Delete VRF {{ obj }}?{% endblock %} {% block message %}

Are you sure you want to delete this VRF? - {% if vrf.prefix_set.count %} + {% if obj.prefix_set.count %} The following prefixes will also be deleted: {% else %} (There are no prefixes associated with this VRF.) {% endif %}

- {% if vrf.prefix_set.count %} + {% if obj.prefix_set.count %}
    - {% for p in vrf.prefix_set.all %} + {% for p in obj.prefix_set.all %}
  • {{ p }}
  • {% endfor %}
diff --git a/netbox/templates/ipam/vrf_edit.html b/netbox/templates/ipam/vrf_edit.html index 4504ed8c1..bd98f8567 100644 --- a/netbox/templates/ipam/vrf_edit.html +++ b/netbox/templates/ipam/vrf_edit.html @@ -1,11 +1,11 @@ {% extends '_base.html' %} {% load form_helpers %} -{% block title %}{% if vrf %}Editing VRF {{ vrf }}{% else %}Add a VRF{% endif %}{% endblock %} +{% block title %}{% if obj %}Editing VRF {{ obj }}{% else %}Add a VRF{% endif %}{% endblock %} {% block content %} -{% if vrf %} -

{{ vrf }}

+{% if obj %} +

{{ obj }}

{% else %}

Add a VRF

{% endif %} @@ -29,9 +29,9 @@
- {% if vrf %} + {% if obj %} - Cancel + Cancel {% else %}