mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-14 01:41:22 -06:00
16136 remove Django Admin (#17619)
* 16136 remove Django Admin
* 16136 fix plugin test
* 16136 fix migrations
* Revert "16136 fix migrations"
This reverts commit 80296fa1ec
.
* Remove obsolete admin module from dummy plugin
* Remove obsolete admin site configuration
* Remove unused import statement
* Remove obsolete admin module
* Misc cleanup
---------
Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
This commit is contained in:
parent
85396866bc
commit
c60a0f4f56
@ -96,14 +96,6 @@ The maximum size (in bytes) of an incoming HTTP request (i.e. `GET` or `POST` da
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## DJANGO_ADMIN_ENABLED
|
|
||||||
|
|
||||||
Default: False
|
|
||||||
|
|
||||||
Setting this to True installs the `django.contrib.admin` app and enables the [Django admin UI](https://docs.djangoproject.com/en/5.0/ref/contrib/admin/). This may be necessary to support older plugins which do not integrate with the native NetBox interface.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ENFORCE_GLOBAL_UNIQUE
|
## ENFORCE_GLOBAL_UNIQUE
|
||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
from django.conf import settings
|
|
||||||
from django.contrib.admin import site as admin_site
|
|
||||||
from taggit.models import Tag
|
|
||||||
|
|
||||||
|
|
||||||
# Override default AdminSite attributes so we can avoid creating and
|
|
||||||
# registering our own class
|
|
||||||
admin_site.site_header = 'NetBox Administration'
|
|
||||||
admin_site.site_title = 'NetBox'
|
|
||||||
admin_site.site_url = '/{}'.format(settings.BASE_PATH)
|
|
||||||
admin_site.index_template = 'admin/index.html'
|
|
||||||
|
|
||||||
# Unregister the unused stock Tag model provided by django-taggit
|
|
||||||
admin_site.unregister(Tag)
|
|
@ -39,8 +39,6 @@ REDIS = {
|
|||||||
|
|
||||||
SECRET_KEY = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
|
SECRET_KEY = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
|
||||||
|
|
||||||
DJANGO_ADMIN_ENABLED = True
|
|
||||||
|
|
||||||
DEFAULT_PERMISSIONS = {}
|
DEFAULT_PERMISSIONS = {}
|
||||||
|
|
||||||
LOGGING = {
|
LOGGING = {
|
||||||
|
@ -3,13 +3,11 @@ from importlib import import_module
|
|||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.conf.urls import include
|
from django.conf.urls import include
|
||||||
from django.contrib.admin.views.decorators import staff_member_required
|
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
from django.utils.module_loading import import_string, module_has_submodule
|
from django.utils.module_loading import import_string, module_has_submodule
|
||||||
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
# Initialize URL base, API, and admin URL patterns for plugins
|
|
||||||
plugin_patterns = []
|
plugin_patterns = []
|
||||||
plugin_api_patterns = [
|
plugin_api_patterns = [
|
||||||
path('', views.PluginsAPIRootView.as_view(), name='api-root'),
|
path('', views.PluginsAPIRootView.as_view(), name='api-root'),
|
||||||
|
@ -110,7 +110,6 @@ DEFAULT_PERMISSIONS = getattr(configuration, 'DEFAULT_PERMISSIONS', {
|
|||||||
'users.delete_token': ({'user': '$user'},),
|
'users.delete_token': ({'user': '$user'},),
|
||||||
})
|
})
|
||||||
DEVELOPER = getattr(configuration, 'DEVELOPER', False)
|
DEVELOPER = getattr(configuration, 'DEVELOPER', False)
|
||||||
DJANGO_ADMIN_ENABLED = getattr(configuration, 'DJANGO_ADMIN_ENABLED', False)
|
|
||||||
DOCS_ROOT = getattr(configuration, 'DOCS_ROOT', os.path.join(os.path.dirname(BASE_DIR), 'docs'))
|
DOCS_ROOT = getattr(configuration, 'DOCS_ROOT', os.path.join(os.path.dirname(BASE_DIR), 'docs'))
|
||||||
EMAIL = getattr(configuration, 'EMAIL', {})
|
EMAIL = getattr(configuration, 'EMAIL', {})
|
||||||
EVENTS_PIPELINE = getattr(configuration, 'EVENTS_PIPELINE', (
|
EVENTS_PIPELINE = getattr(configuration, 'EVENTS_PIPELINE', (
|
||||||
@ -373,7 +372,6 @@ SERVER_EMAIL = EMAIL.get('FROM_EMAIL')
|
|||||||
#
|
#
|
||||||
|
|
||||||
INSTALLED_APPS = [
|
INSTALLED_APPS = [
|
||||||
'django.contrib.admin',
|
|
||||||
'django.contrib.auth',
|
'django.contrib.auth',
|
||||||
'django.contrib.contenttypes',
|
'django.contrib.contenttypes',
|
||||||
'django.contrib.sessions',
|
'django.contrib.sessions',
|
||||||
@ -411,8 +409,6 @@ INSTALLED_APPS = [
|
|||||||
]
|
]
|
||||||
if not DEBUG:
|
if not DEBUG:
|
||||||
INSTALLED_APPS.remove('debug_toolbar')
|
INSTALLED_APPS.remove('debug_toolbar')
|
||||||
if not DJANGO_ADMIN_ENABLED:
|
|
||||||
INSTALLED_APPS.remove('django.contrib.admin')
|
|
||||||
|
|
||||||
# Middleware
|
# Middleware
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
@ -549,7 +545,6 @@ EXEMPT_EXCLUDE_MODELS = (
|
|||||||
|
|
||||||
# All URLs starting with a string listed here are exempt from maintenance mode enforcement
|
# All URLs starting with a string listed here are exempt from maintenance mode enforcement
|
||||||
MAINTENANCE_EXEMPT_PATHS = (
|
MAINTENANCE_EXEMPT_PATHS = (
|
||||||
f'/{BASE_PATH}admin/',
|
|
||||||
f'/{BASE_PATH}extras/config-revisions/', # Allow modifying the configuration
|
f'/{BASE_PATH}extras/config-revisions/', # Allow modifying the configuration
|
||||||
LOGIN_URL,
|
LOGIN_URL,
|
||||||
LOGIN_REDIRECT_URL,
|
LOGIN_REDIRECT_URL,
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
from django.contrib import admin
|
|
||||||
|
|
||||||
from netbox.admin import admin_site
|
|
||||||
from .models import DummyModel
|
|
||||||
|
|
||||||
|
|
||||||
@admin.register(DummyModel, site=admin_site)
|
|
||||||
class DummyModelAdmin(admin.ModelAdmin):
|
|
||||||
list_display = ('name', 'number')
|
|
@ -36,12 +36,6 @@ class PluginTest(TestCase):
|
|||||||
instance.delete()
|
instance.delete()
|
||||||
self.assertIsNone(instance.pk)
|
self.assertIsNone(instance.pk)
|
||||||
|
|
||||||
def test_admin(self):
|
|
||||||
|
|
||||||
# Test admin view URL resolution
|
|
||||||
url = reverse('admin:dummy_plugin_dummymodel_add')
|
|
||||||
self.assertEqual(url, '/admin/dummy_plugin/dummymodel/add/')
|
|
||||||
|
|
||||||
@override_settings(LOGIN_REQUIRED=False)
|
@override_settings(LOGIN_REQUIRED=False)
|
||||||
def test_views(self):
|
def test_views(self):
|
||||||
|
|
||||||
|
@ -77,11 +77,6 @@ _patterns = [
|
|||||||
path('api/plugins/', include((plugin_api_patterns, 'plugins-api'))),
|
path('api/plugins/', include((plugin_api_patterns, 'plugins-api'))),
|
||||||
]
|
]
|
||||||
|
|
||||||
# Django admin UI
|
|
||||||
if settings.DJANGO_ADMIN_ENABLED:
|
|
||||||
from .admin import admin_site
|
|
||||||
_patterns.append(path('admin/', admin_site.urls))
|
|
||||||
|
|
||||||
# django-debug-toolbar
|
# django-debug-toolbar
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
import debug_toolbar
|
import debug_toolbar
|
||||||
|
@ -36,11 +36,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
<div class="dropdown-menu dropdown-menu-end dropdown-menu-arrow" {% htmx_boost %}>
|
<div class="dropdown-menu dropdown-menu-end dropdown-menu-arrow" {% htmx_boost %}>
|
||||||
{% if config.DJANGO_ADMIN_ENABLED and request.user.is_staff %}
|
|
||||||
<a class="dropdown-item" href="{% url 'admin:index' %}">
|
|
||||||
<i class="mdi mdi-cog"></i> {% trans "Django Admin" %}
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
<a href="{% url 'account:profile' %}" class="dropdown-item">
|
<a href="{% url 'account:profile' %}" class="dropdown-item">
|
||||||
<i class="mdi mdi-account"></i> {% trans "Profile" %}
|
<i class="mdi mdi-account"></i> {% trans "Profile" %}
|
||||||
</a>
|
</a>
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
from django.contrib import admin
|
|
||||||
from django.contrib.auth.models import Group as DjangoGroup
|
|
||||||
|
|
||||||
# Prevent the stock Django Group model from appearing in the admin UI (if enabled)
|
|
||||||
admin.site.unregister(DjangoGroup)
|
|
Loading…
Reference in New Issue
Block a user