diff --git a/netbox/ipam/urls.py b/netbox/ipam/urls.py index 4cbf811e6..17fae57f2 100644 --- a/netbox/ipam/urls.py +++ b/netbox/ipam/urls.py @@ -22,30 +22,30 @@ urlpatterns = [ 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'), + url(r'^prefixes/add/$', views.PrefixAddView.as_view(), name='prefix_add'), url(r'^prefixes/import/$', views.PrefixBulkImportView.as_view(), name='prefix_import'), url(r'^prefixes/edit/$', views.PrefixBulkEditView.as_view(), name='prefix_bulk_edit'), url(r'^prefixes/delete/$', views.PrefixBulkDeleteView.as_view(), name='prefix_bulk_delete'), url(r'^prefixes/(?P\d+)/$', views.prefix, name='prefix'), - url(r'^prefixes/(?P\d+)/edit/$', views.prefix_edit, name='prefix_edit'), - url(r'^prefixes/(?P\d+)/delete/$', views.prefix_delete, name='prefix_delete'), + url(r'^prefixes/(?P\d+)/edit/$', views.PrefixEditView.as_view(), name='prefix_edit'), + url(r'^prefixes/(?P\d+)/delete/$', views.PrefixDeleteView.as_view(), name='prefix_delete'), url(r'^prefixes/(?P\d+)/ip-addresses/$', views.prefix_ipaddresses, name='prefix_ipaddresses'), url(r'^ip-addresses/$', views.IPAddressListView.as_view(), name='ipaddress_list'), - url(r'^ip-addresses/add/$', views.ipaddress_add, name='ipaddress_add'), + url(r'^ip-addresses/add/$', views.IPAddressAddView.as_view(), name='ipaddress_add'), url(r'^ip-addresses/import/$', views.IPAddressBulkImportView.as_view(), name='ipaddress_import'), url(r'^ip-addresses/edit/$', views.IPAddressBulkEditView.as_view(), name='ipaddress_bulk_edit'), url(r'^ip-addresses/delete/$', views.IPAddressBulkDeleteView.as_view(), name='ipaddress_bulk_delete'), url(r'^ip-addresses/(?P\d+)/$', views.ipaddress, name='ipaddress'), - url(r'^ip-addresses/(?P\d+)/edit/$', views.ipaddress_edit, name='ipaddress_edit'), - url(r'^ip-addresses/(?P\d+)/delete/$', views.ipaddress_delete, name='ipaddress_delete'), + url(r'^ip-addresses/(?P\d+)/edit/$', views.IPAddressEditView.as_view(), name='ipaddress_edit'), + url(r'^ip-addresses/(?P\d+)/delete/$', views.IPAddressDeleteView.as_view(), name='ipaddress_delete'), url(r'^vlans/$', views.VLANListView.as_view(), name='vlan_list'), - url(r'^vlans/add/$', views.vlan_add, name='vlan_add'), + url(r'^vlans/add/$', views.VLANAddView.as_view(), name='vlan_add'), url(r'^vlans/import/$', views.VLANBulkImportView.as_view(), name='vlan_import'), url(r'^vlans/edit/$', views.VLANBulkEditView.as_view(), name='vlan_bulk_edit'), url(r'^vlans/delete/$', views.VLANBulkDeleteView.as_view(), name='vlan_bulk_delete'), url(r'^vlans/(?P\d+)/$', views.vlan, name='vlan'), - url(r'^vlans/(?P\d+)/edit/$', views.vlan_edit, name='vlan_edit'), - url(r'^vlans/(?P\d+)/delete/$', views.vlan_delete, name='vlan_delete'), + url(r'^vlans/(?P\d+)/edit/$', views.VLANEditView.as_view(), name='vlan_edit'), + url(r'^vlans/(?P\d+)/delete/$', views.VLANDeleteView.as_view(), name='vlan_delete'), ] diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 4beb32473..f4d11479f 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -283,78 +283,27 @@ def prefix(request, pk): }) -@permission_required('ipam.add_prefix') -def prefix_add(request): - - if request.method == 'POST': - form = PrefixForm(request.POST) - if form.is_valid(): - prefix = form.save() - messages.success(request, "Added new prefix: {0}".format(prefix.prefix)) - if '_addanother' in request.POST: - return redirect('ipam:prefix_add') - else: - return redirect('ipam:prefix', pk=prefix.pk) - - else: - form = PrefixForm(initial={ - 'site': request.GET.get('site'), - 'vrf': request.GET.get('vrf'), - 'prefix': request.GET.get('prefix'), - }) - - return render(request, 'ipam/prefix_edit.html', { - 'form': form, - 'cancel_url': reverse('ipam:prefix_list'), - }) +class PrefixAddView(PermissionRequiredMixin, ObjectAddView): + permission_required = 'ipam.add_prefix' + model = Prefix + form_class = PrefixForm + template_name = 'ipam/prefix_edit.html' + cancel_url = 'ipam:prefix_list' + fields_initial = ['site', 'vrf', 'prefix'] -@permission_required('ipam.change_prefix') -def prefix_edit(request, pk): - - prefix = get_object_or_404(Prefix, pk=pk) - - if request.method == 'POST': - form = PrefixForm(request.POST, instance=prefix) - if form.is_valid(): - prefix = form.save() - messages.success(request, "Modified prefix {0}".format(prefix.prefix)) - return redirect('ipam:prefix', pk=prefix.pk) - - else: - form = PrefixForm(instance=prefix) - - return render(request, 'ipam/prefix_edit.html', { - 'prefix': prefix, - 'form': form, - 'cancel_url': reverse('ipam:prefix', kwargs={'pk': prefix.pk}), - }) +class PrefixEditView(PermissionRequiredMixin, ObjectEditView): + permission_required = 'ipam.change_prefix' + model = Prefix + form_class = PrefixForm + template_name = 'ipam/prefix_edit.html' -@permission_required('ipam.delete_prefix') -def prefix_delete(request, pk): - - prefix = get_object_or_404(Prefix, pk=pk) - - if request.method == 'POST': - form = ConfirmationForm(request.POST) - if form.is_valid(): - try: - prefix.delete() - messages.success(request, "Prefix {0} has been deleted".format(prefix)) - return redirect('ipam:prefix_list') - except ProtectedError, e: - handle_protectederror(prefix, request, e) - return redirect('ipam:prefix', pk=prefix.pk) - - else: - form = ConfirmationForm() - - return render(request, 'ipam/prefix_delete.html', { - 'prefix': prefix, - 'form': form, - 'cancel_url': reverse('ipam:prefix', kwargs={'pk': prefix.pk}) - }) +class PrefixDeleteView(PermissionRequiredMixin, ObjectDeleteView): + permission_required = 'ipam.delete_prefix' + model = Prefix + template_name = 'ipam/prefix_delete.html' + redirect_url = 'ipam:prefix_list' class PrefixBulkImportView(PermissionRequiredMixin, BulkImportView): @@ -447,85 +396,27 @@ def ipaddress(request, pk): }) -@permission_required('ipam.add_ipaddress') -def ipaddress_add(request): - - if request.method == 'POST': - form = IPAddressForm(request.POST) - if form.is_valid(): - ipaddress = form.save() - messages.success(request, "Created new IP Address: {0}".format(ipaddress)) - if '_addanother' in request.POST: - return redirect('ipam:ipaddress_add') - else: - return redirect('ipam:ipaddress', pk=ipaddress.pk) - - else: - form = IPAddressForm(initial={ - 'ipaddress': request.GET.get('ipaddress', None), - }) - - return render(request, 'ipam/ipaddress_edit.html', { - 'form': form, - 'cancel_url': reverse('ipam:ipaddress_list'), - }) +class IPAddressAddView(PermissionRequiredMixin, ObjectAddView): + permission_required = 'ipam.add_ipaddress' + model = IPAddress + form_class = IPAddressForm + template_name = 'ipam/ipaddress_edit.html' + cancel_url = 'ipam:ipaddress_list' + fields_initial = ['ipaddress'] -@permission_required('ipam.change_ipaddress') -def ipaddress_edit(request, pk): - - ipaddress = get_object_or_404(IPAddress, pk=pk) - - if request.method == 'POST': - form = IPAddressForm(request.POST, instance=ipaddress) - if form.is_valid(): - ipaddress = form.save() - messages.success(request, "Modified IP address {0}".format(ipaddress)) - return redirect('ipam:ipaddress', pk=ipaddress.pk) - - else: - form = IPAddressForm(instance=ipaddress) - - return render(request, 'ipam/ipaddress_edit.html', { - 'ipaddress': ipaddress, - 'form': form, - 'cancel_url': reverse('ipam:ipaddress', kwargs={'pk': ipaddress.pk}), - }) +class IPAddressEditView(PermissionRequiredMixin, ObjectEditView): + permission_required = 'ipam.change_ipaddress' + model = IPAddress + form_class = IPAddressForm + template_name = 'ipam/ipaddress_edit.html' -@permission_required('ipam.delete_ipaddress') -def ipaddress_delete(request, pk): - - ipaddress = get_object_or_404(IPAddress, pk=pk) - - if request.method == 'POST': - form = ConfirmationForm(request.POST) - if form.is_valid(): - try: - ipaddress.delete() - messages.success(request, "IP address {0} has been deleted".format(ipaddress)) - if ipaddress.interface: - return redirect('dcim:device', pk=ipaddress.interface.device.pk) - else: - return redirect('ipam:ipaddress_list') - except ProtectedError, e: - handle_protectederror(ipaddress, request, e) - return redirect('ipam:ipaddress', pk=ipaddress.pk) - - else: - form = ConfirmationForm() - - # Upon cancellation, redirect to the assigned device if one exists - if ipaddress.interface: - cancel_url = reverse('dcim:device', kwargs={'pk': ipaddress.interface.device.pk}) - else: - cancel_url = reverse('ipam:ipaddress_list') - - return render(request, 'ipam/ipaddress_delete.html', { - 'ipaddress': ipaddress, - 'form': form, - 'cancel_url': cancel_url, - }) +class IPAddressDeleteView(PermissionRequiredMixin, ObjectDeleteView): + permission_required = 'ipam.delete_ipaddress' + model = IPAddress + template_name = 'ipam/ipaddress_delete.html' + redirect_url = 'ipam:ipaddress_list' class IPAddressBulkImportView(PermissionRequiredMixin, BulkImportView): @@ -601,78 +492,26 @@ def vlan(request, pk): }) -@permission_required('ipam.add_vlan') -def vlan_add(request): - - if request.method == 'POST': - form = VLANForm(request.POST) - if form.is_valid(): - vlan = form.save() - messages.success(request, "Added new VLAN: {0}".format(vlan)) - if '_addanother' in request.POST: - base_url = reverse('ipam:vlan_add') - params = urlencode({ - 'site': vlan.site.pk, - }) - return HttpResponseRedirect('{}?{}'.format(base_url, params)) - else: - return redirect('ipam:vlan', pk=vlan.pk) - - else: - form = VLANForm() - - return render(request, 'ipam/vlan_edit.html', { - 'form': form, - 'cancel_url': reverse('ipam:vlan_list'), - }) +class VLANAddView(PermissionRequiredMixin, ObjectAddView): + permission_required = 'ipam.add_vlan' + model = VLAN + form_class = VLANForm + template_name = 'ipam/vlan_edit.html' + cancel_url = 'ipam:vlan_list' -@permission_required('ipam.change_vlan') -def vlan_edit(request, pk): - - vlan = get_object_or_404(VLAN, pk=pk) - - if request.method == 'POST': - form = VLANForm(request.POST, instance=vlan) - if form.is_valid(): - vlan = form.save() - messages.success(request, "Modified VLAN {0}".format(vlan)) - return redirect('ipam:vlan', pk=vlan.pk) - - else: - form = VLANForm(instance=vlan) - - return render(request, 'ipam/vlan_edit.html', { - 'vlan': vlan, - 'form': form, - 'cancel_url': reverse('ipam:vlan', kwargs={'pk': vlan.pk}), - }) +class VLANEditView(PermissionRequiredMixin, ObjectEditView): + permission_required = 'ipam.change_vlan' + model = VLAN + form_class = VLANForm + template_name = 'ipam/vlan_edit.html' -@permission_required('ipam.delete_vlan') -def vlan_delete(request, pk): - - vlan = get_object_or_404(VLAN, pk=pk) - - if request.method == 'POST': - form = ConfirmationForm(request.POST) - if form.is_valid(): - try: - vlan.delete() - messages.success(request, "VLAN {0} has been deleted".format(vlan)) - return redirect('ipam:vlan_list') - except ProtectedError, e: - handle_protectederror(vlan, request, e) - return redirect('ipam:vlan', pk=vlan.pk) - - else: - form = ConfirmationForm() - - return render(request, 'ipam/vlan_delete.html', { - 'vlan': vlan, - 'form': form, - 'cancel_url': reverse('ipam:vlan', kwargs={'pk': vlan.pk}) - }) +class VLANDeleteView(PermissionRequiredMixin, ObjectDeleteView): + permission_required = 'ipam.delete_vlan' + model = VLAN + template_name = 'ipam/vlan_delete.html' + redirect_url = 'ipam:vlan_list' class VLANBulkImportView(PermissionRequiredMixin, BulkImportView): diff --git a/netbox/templates/ipam/ipaddress_delete.html b/netbox/templates/ipam/ipaddress_delete.html index 5b08c7c75..16d69323f 100644 --- a/netbox/templates/ipam/ipaddress_delete.html +++ b/netbox/templates/ipam/ipaddress_delete.html @@ -1,8 +1,8 @@ {% extends 'utilities/confirmation_form.html' %} {% load form_helpers %} -{% block title %}Delete IP address {{ ipaddress }}?{% endblock %} +{% block title %}Delete IP address {{ obj }}?{% endblock %} {% block message %} -

Are you sure you want to delete this IP address?

+

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

{% endblock %} diff --git a/netbox/templates/ipam/ipaddress_edit.html b/netbox/templates/ipam/ipaddress_edit.html index 7015e717c..0c965211f 100644 --- a/netbox/templates/ipam/ipaddress_edit.html +++ b/netbox/templates/ipam/ipaddress_edit.html @@ -1,10 +1,10 @@ {% extends '_base.html' %} {% load form_helpers %} -{% block title %}{% if ipaddress %}Editing IP Address {{ ipaddress }}{% else %}Add an IP Address{% endif %}{% endblock %} +{% block title %}{% if obj %}Editing IP Address {{ obj }}{% else %}Add an IP Address{% endif %}{% endblock %} {% block content %} -

{% if ipaddress %}Editing IP Address {{ ipaddress }}{% else %}Add an IP Address{% endif %}

+

{% if obj %}Editing IP Address {{ obj }}{% else %}Add an IP Address{% endif %}

{% csrf_token %}
@@ -22,13 +22,13 @@
{% render_field form.address %} {% render_field form.vrf %} - {% if ipaddress %} + {% if obj %}

- {% if ipaddress.interface %} - {{ ipaddress.interface.device }} + {% if obj.interface %} + {{ obj.interface.device }} {% else %} None {% endif %} @@ -38,7 +38,7 @@

-

{{ ipaddress.interface }}

+

{{ obj.interface }}

{% endif %} @@ -70,9 +70,9 @@
- {% if ipaddress %} + {% if obj %} - Cancel + Cancel {% else %} diff --git a/netbox/templates/ipam/prefix_delete.html b/netbox/templates/ipam/prefix_delete.html index c769086df..229dc2857 100644 --- a/netbox/templates/ipam/prefix_delete.html +++ b/netbox/templates/ipam/prefix_delete.html @@ -1,8 +1,8 @@ {% extends 'utilities/confirmation_form.html' %} {% load form_helpers %} -{% block title %}Delete prefix {{ prefix }}?{% endblock %} +{% block title %}Delete prefix {{ obj }}?{% endblock %} {% block message %} -

Are you sure you want to delete this prefix?

+

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

{% endblock %} diff --git a/netbox/templates/ipam/prefix_edit.html b/netbox/templates/ipam/prefix_edit.html index 2ecd7b8d6..13f4fd932 100644 --- a/netbox/templates/ipam/prefix_edit.html +++ b/netbox/templates/ipam/prefix_edit.html @@ -1,11 +1,11 @@ {% extends '_base.html' %} {% load form_helpers %} -{% block title %}{% if prefix %}Editing prefix {{ prefix }}{% else %}Add a prefix{% endif %}{% endblock %} +{% block title %}{% if obj %}Editing prefix {{ obj }}{% else %}Add a prefix{% endif %}{% endblock %} {% block content %} -{% if prefix %} -

{{ prefix }}

+{% if obj %} +

{{ obj }}

{% else %}

Add a Prefix

{% endif %} @@ -35,9 +35,9 @@
- {% if prefix %} + {% if obj %} - Cancel + Cancel {% else %} diff --git a/netbox/templates/ipam/vlan_delete.html b/netbox/templates/ipam/vlan_delete.html index 7fc182caa..b12747e9b 100644 --- a/netbox/templates/ipam/vlan_delete.html +++ b/netbox/templates/ipam/vlan_delete.html @@ -1,20 +1,20 @@ {% extends 'utilities/confirmation_form.html' %} {% load form_helpers %} -{% block title %}Delete VLAN {{ vlan }}?{% endblock %} +{% block title %}Delete VLAN {{ obj }}?{% endblock %} {% block message %}

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

- {% if vlan.prefix_set.count %} + {% if obj.prefix_set.count %}
    - {% for p in vlan.prefix_set.all %} + {% for p in obj.prefix_set.all %}
  • {{ p }}
  • {% endfor %}
diff --git a/netbox/templates/ipam/vlan_edit.html b/netbox/templates/ipam/vlan_edit.html index f2b4edaa5..70684ec57 100644 --- a/netbox/templates/ipam/vlan_edit.html +++ b/netbox/templates/ipam/vlan_edit.html @@ -1,16 +1,17 @@ {% extends '_base.html' %} {% load form_helpers %} -{% block title %}Editing VLAN {{ vlan }}{% endblock %} +{% block title %}{% if obj %}Editing VLAN {{ obj }}{% else %}Add a new VLAN{% endif %}{% endblock %} {% block content %} -{% if vlan %} -

{{ vlan }}

+{% if obj %} +

{{ obj }}

{% else %}

Add a VLAN

{% endif %} {% csrf_token %} +
{% if form.non_field_errors %} @@ -33,9 +34,9 @@
- {% if vlan %} + {% if obj %} - Cancel + Cancel {% else %}