Browse Source

Converted IPAM VRF, Aggregate add/edit/delete views to CBVs

Jeremy Stretch 9 years ago
parent
commit
60daaee204

+ 6 - 6
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<pk>\d+)/$', views.vrf, name='vrf'),
-    url(r'^vrfs/(?P<pk>\d+)/edit/$', views.vrf_edit, name='vrf_edit'),
-    url(r'^vrfs/(?P<pk>\d+)/delete/$', views.vrf_delete, name='vrf_delete'),
+    url(r'^vrfs/(?P<pk>\d+)/edit/$', views.VRFEditView.as_view(), name='vrf_edit'),
+    url(r'^vrfs/(?P<pk>\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<pk>\d+)/$', views.aggregate, name='aggregate'),
-    url(r'^aggregates/(?P<pk>\d+)/edit/$', views.aggregate_edit, name='aggregate_edit'),
-    url(r'^aggregates/(?P<pk>\d+)/delete/$', views.aggregate_delete, name='aggregate_delete'),
+    url(r'^aggregates/(?P<pk>\d+)/edit/$', views.AggregateEditView.as_view(), name='aggregate_edit'),
+    url(r'^aggregates/(?P<pk>\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'),

+ 40 - 135
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'),
-    })
-
-
-@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}),
-    })
-
-
-@permission_required('ipam.delete_vrf')
-def vrf_delete(request, pk):
+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'
 
-    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)
+class VRFEditView(PermissionRequiredMixin, ObjectEditView):
+    permission_required = 'ipam.change_vrf'
+    model = VRF
+    form_class = VRFForm
+    template_name = 'ipam/vrf_edit.html'
 
-    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'),
-    })
-
-
-@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}),
-    })
-
-
-@permission_required('ipam.delete_aggregate')
-def aggregate_delete(request, pk):
+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'
 
-    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)
+class AggregateEditView(PermissionRequiredMixin, ObjectEditView):
+    permission_required = 'ipam.change_aggregate'
+    model = Aggregate
+    form_class = AggregateForm
+    template_name = 'ipam/aggregate_edit.html'
 
-    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):

+ 2 - 2
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 %}
-    <p>Are you sure you want to delete this aggregate?</p>
+    <p>Are you sure you want to delete {{ obj }}?</p>
 {% endblock %}

+ 5 - 5
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 %}
-	<h1>{{ aggregate }}</h1>
+{% if obj %}
+	<h1>{{ obj }}</h1>
 {% else %}
 	<h1>Add an Aggregate</h1>
 {% endif %}
@@ -32,9 +32,9 @@
             </div>
 		    <div class="form-group">
                 <div class="col-md-9 col-md-offset-3">
-                    {% if aggregate %}
+                    {% if obj %}
                         <button type="submit" name="_update" class="btn btn-primary">Update</button>
-                        <a href="{% url 'ipam:aggregate' pk=aggregate.pk %}" class="btn btn-default">Cancel</a>
+                        <a href="{% url 'ipam:aggregate' pk=obj.pk %}" class="btn btn-default">Cancel</a>
                     {% else %}
                         <button type="submit" name="_create" class="btn btn-primary">Create</button>
                         <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>

+ 4 - 4
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 %}
     <p>
         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 %}
     </p>
-    {% if vrf.prefix_set.count %}
+    {% if obj.prefix_set.count %}
         <ul>
-            {% for p in vrf.prefix_set.all %}
+            {% for p in obj.prefix_set.all %}
             <li><a href="{% url 'ipam:prefix' pk=p.pk %}">{{ p }}</a></li>
             {% endfor %}
         </ul>

+ 5 - 5
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 %}
-	<h1>{{ vrf }}</h1>
+{% if obj %}
+	<h1>{{ obj }}</h1>
 {% else %}
 	<h1>Add a VRF</h1>
 {% endif %}
@@ -29,9 +29,9 @@
             </div>
 		    <div class="form-group">
                 <div class="col-md-9 col-md-offset-3">
-                    {% if vrf %}
+                    {% if obj %}
                         <button type="submit" name="_update" class="btn btn-primary">Update</button>
-                        <a href="{% url 'ipam:vrf' pk=vrf.pk %}" class="btn btn-default">Cancel</a>
+                        <a href="{% url 'ipam:vrf' pk=obj.pk %}" class="btn btn-default">Cancel</a>
                     {% else %}
                         <button type="submit" name="_create" class="btn btn-primary">Create</button>
                         <button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>