Преглед изворни кода

Clean up users & account URLs

Jeremy Stretch пре 2 година
родитељ
комит
9b6e32896d

+ 1 - 1
netbox/extras/tests/test_views.py

@@ -261,7 +261,7 @@ class BookmarkTestCase(
 
 
     def _get_url(self, action, instance=None):
     def _get_url(self, action, instance=None):
         if action == 'list':
         if action == 'list':
-            return reverse('users:bookmarks')
+            return reverse('account:bookmarks')
         return super()._get_url(action, instance)
         return super()._get_url(action, instance)
 
 
     def test_list_objects_anonymous(self):
     def test_list_objects_anonymous(self):

+ 4 - 1
netbox/netbox/urls.py

@@ -32,10 +32,13 @@ _patterns = [
     path('extras/', include('extras.urls')),
     path('extras/', include('extras.urls')),
     path('ipam/', include('ipam.urls')),
     path('ipam/', include('ipam.urls')),
     path('tenancy/', include('tenancy.urls')),
     path('tenancy/', include('tenancy.urls')),
-    path('user/', include('users.urls')),
+    path('users/', include('users.urls')),
     path('virtualization/', include('virtualization.urls')),
     path('virtualization/', include('virtualization.urls')),
     path('wireless/', include('wireless.urls')),
     path('wireless/', include('wireless.urls')),
 
 
+    # Current user views
+    path('user/', include('users.account_urls')),
+
     # HTMX views
     # HTMX views
     path('htmx/object-selector/', htmx.ObjectSelectorView.as_view(), name='htmx_object_selector'),
     path('htmx/object-selector/', htmx.ObjectSelectorView.as_view(), name='htmx_object_selector'),
 
 

+ 4 - 4
netbox/templates/inc/profile_button.html

@@ -19,22 +19,22 @@
         {% endif %}
         {% endif %}
       </li>
       </li>
       <li>
       <li>
-        <a class="dropdown-item" href="{% url 'users:profile' %}">
+        <a class="dropdown-item" href="{% url 'account:profile' %}">
           <i class="mdi mdi-account"></i> Profile
           <i class="mdi mdi-account"></i> Profile
         </a>
         </a>
       </li>
       </li>
       <li>
       <li>
-        <a class="dropdown-item" href="{% url 'users:bookmarks' %}">
+        <a class="dropdown-item" href="{% url 'account:bookmarks' %}">
           <i class="mdi mdi-bookmark"></i> Bookmarks
           <i class="mdi mdi-bookmark"></i> Bookmarks
         </a>
         </a>
       </li>
       </li>
       <li>
       <li>
-        <a class="dropdown-item" href="{% url 'users:preferences' %}">
+        <a class="dropdown-item" href="{% url 'account:preferences' %}">
           <i class="mdi mdi-wrench"></i> Preferences
           <i class="mdi mdi-wrench"></i> Preferences
         </a>
         </a>
       </li>
       </li>
       <li>
       <li>
-        <a class="dropdown-item" href="{% url 'users:usertoken_list' %}">
+        <a class="dropdown-item" href="{% url 'account:usertoken_list' %}">
           <i class="mdi mdi-key"></i> API Tokens
           <i class="mdi mdi-key"></i> API Tokens
         </a>
         </a>
       </li>
       </li>

+ 5 - 5
netbox/templates/users/account/base.html

@@ -4,21 +4,21 @@
 {% block tabs %}
 {% block tabs %}
   <ul class="nav nav-tabs px-3">
   <ul class="nav nav-tabs px-3">
     <li role="presentation" class="nav-item">
     <li role="presentation" class="nav-item">
-      <a class="nav-link{% if active_tab == 'profile' %} active{% endif %}" href="{% url 'users:profile' %}">{% trans "Profile" %}</a>
+      <a class="nav-link{% if active_tab == 'profile' %} active{% endif %}" href="{% url 'account:profile' %}">{% trans "Profile" %}</a>
     </li>
     </li>
     <li role="presentation" class="nav-item">
     <li role="presentation" class="nav-item">
-      <a class="nav-link{% if active_tab == 'bookmarks' %} active{% endif %}" href="{% url 'users:bookmarks' %}">{% trans "Bookmarks" %}</a>
+      <a class="nav-link{% if active_tab == 'bookmarks' %} active{% endif %}" href="{% url 'account:bookmarks' %}">{% trans "Bookmarks" %}</a>
     </li>
     </li>
     <li role="presentation" class="nav-item">
     <li role="presentation" class="nav-item">
-      <a class="nav-link{% if active_tab == 'preferences' %} active{% endif %}" href="{% url 'users:preferences' %}">{% trans "Preferences" %}</a>
+      <a class="nav-link{% if active_tab == 'preferences' %} active{% endif %}" href="{% url 'account:preferences' %}">{% trans "Preferences" %}</a>
     </li>
     </li>
     {% if not request.user.ldap_username %}
     {% if not request.user.ldap_username %}
       <li role="presentation" class="nav-item">
       <li role="presentation" class="nav-item">
-        <a class="nav-link{% if active_tab == 'password' %} active{% endif %}" href="{% url 'users:change_password' %}">{% trans "Password" %}</a>
+        <a class="nav-link{% if active_tab == 'password' %} active{% endif %}" href="{% url 'account:change_password' %}">{% trans "Password" %}</a>
       </li>
       </li>
     {% endif %}
     {% endif %}
     <li role="presentation" class="nav-item">
     <li role="presentation" class="nav-item">
-      <a class="nav-link{% if active_tab == 'api-tokens' %} active{% endif %}" href="{% url 'users:usertoken_list' %}">{% trans "API Tokens" %}</a>
+      <a class="nav-link{% if active_tab == 'api-tokens' %} active{% endif %}" href="{% url 'account:usertoken_list' %}">{% trans "API Tokens" %}</a>
     </li>
     </li>
   </ul>
   </ul>
 {% endblock %}
 {% endblock %}

+ 1 - 1
netbox/templates/users/account/bookmarks.html

@@ -9,7 +9,7 @@
 
 
   <form method="post" class="form form-horizontal">
   <form method="post" class="form form-horizontal">
     {% csrf_token %}
     {% csrf_token %}
-    <input type="hidden" name="return_url" value="{% url 'users:bookmarks' %}" />
+    <input type="hidden" name="return_url" value="{% url 'account:bookmarks' %}" />
 
 
     {# Table #}
     {# Table #}
     <div class="row">
     <div class="row">

+ 1 - 1
netbox/templates/users/account/password.html

@@ -13,7 +13,7 @@
             {% render_field form.new_password2 %}
             {% render_field form.new_password2 %}
         </div>
         </div>
         <div class="text-end">
         <div class="text-end">
-            <a href="{% url 'users:profile' %}" class="btn btn-outline-danger">Cancel</a>
+            <a href="{% url 'account:profile' %}" class="btn btn-outline-danger">Cancel</a>
             <button type="submit" name="_update" class="btn btn-primary">Save</button>
             <button type="submit" name="_update" class="btn btn-primary">Save</button>
         </div>
         </div>
     </form>
     </form>

+ 1 - 1
netbox/templates/users/account/preferences.html

@@ -79,7 +79,7 @@
     </div>
     </div>
 
 
     <div class="text-end my-3">
     <div class="text-end my-3">
-      <a class="btn btn-outline-secondary" href="{% url 'users:preferences' %}">Cancel</a>
+      <a class="btn btn-outline-secondary" href="{% url 'account:preferences' %}">Cancel</a>
       <button type="submit" name="_update" class="btn btn-primary">Save </button>
       <button type="submit" name="_update" class="btn btn-primary">Save </button>
     </div>
     </div>
   </form>
   </form>

+ 1 - 1
netbox/templates/users/account/token.html

@@ -5,7 +5,7 @@
 {% load plugins %}
 {% load plugins %}
 
 
 {% block breadcrumbs %}
 {% block breadcrumbs %}
-  <li class="breadcrumb-item"><a href="{% url 'users:usertoken_list' %}">{% trans "My API Tokens" %}</a></li>
+  <li class="breadcrumb-item"><a href="{% url 'account:usertoken_list' %}">{% trans "My API Tokens" %}</a></li>
 {% endblock breadcrumbs %}
 {% endblock breadcrumbs %}
 
 
 {% block title %}{% trans "Token" %} {{ object }}{% endblock %}
 {% block title %}{% trans "Token" %} {{ object }}{% endblock %}

+ 1 - 1
netbox/templates/users/account/token_list.html

@@ -7,7 +7,7 @@
 {% block content %}
 {% block content %}
 <div class="row">
 <div class="row">
 	<div class="col col-md-12 text-end">
 	<div class="col col-md-12 text-end">
-    <a href="{% url 'users:usertoken_add' %}" class="btn btn-sm btn-primary my-3">
+    <a href="{% url 'account:usertoken_add' %}" class="btn btn-sm btn-primary my-3">
       <span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add a Token
       <span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add a Token
     </a>
     </a>
   </div>
   </div>

+ 18 - 0
netbox/users/account_urls.py

@@ -0,0 +1,18 @@
+from django.urls import include, path
+
+from utilities.urls import get_model_urls
+from . import views
+
+app_name = 'account'
+urlpatterns = [
+
+    # Account views
+    path('profile/', views.ProfileView.as_view(), name='profile'),
+    path('bookmarks/', views.BookmarkListView.as_view(), name='bookmarks'),
+    path('preferences/', views.UserConfigView.as_view(), name='preferences'),
+    path('password/', views.ChangePasswordView.as_view(), name='change_password'),
+    path('api-tokens/', views.UserTokenListView.as_view(), name='usertoken_list'),
+    path('api-tokens/add/', views.UserTokenEditView.as_view(), name='usertoken_add'),
+    path('api-tokens/<int:pk>/', include(get_model_urls('users', 'usertoken'))),
+
+]

+ 1 - 1
netbox/users/models.py

@@ -331,7 +331,7 @@ class UserToken(Token):
         verbose_name = 'token'
         verbose_name = 'token'
 
 
     def get_absolute_url(self):
     def get_absolute_url(self):
-        return reverse('users:usertoken', args=[self.pk])
+        return reverse('account:usertoken', args=[self.pk])
 
 
 
 
 #
 #

+ 0 - 9
netbox/users/urls.py

@@ -6,15 +6,6 @@ from . import views
 app_name = 'users'
 app_name = 'users'
 urlpatterns = [
 urlpatterns = [
 
 
-    # Account views
-    path('profile/', views.ProfileView.as_view(), name='profile'),
-    path('bookmarks/', views.BookmarkListView.as_view(), name='bookmarks'),
-    path('preferences/', views.UserConfigView.as_view(), name='preferences'),
-    path('password/', views.ChangePasswordView.as_view(), name='change_password'),
-    path('api-tokens/', views.UserTokenListView.as_view(), name='usertoken_list'),
-    path('api-tokens/add/', views.UserTokenEditView.as_view(), name='usertoken_add'),
-    path('api-tokens/<int:pk>/', include(get_model_urls('users', 'usertoken'))),
-
     # Tokens
     # Tokens
     path('tokens/', views.TokenListView.as_view(), name='token_list'),
     path('tokens/', views.TokenListView.as_view(), name='token_list'),
     path('tokens/add/', views.TokenEditView.as_view(), name='token_add'),
     path('tokens/add/', views.TokenEditView.as_view(), name='token_add'),

+ 9 - 9
netbox/users/views.py

@@ -193,7 +193,7 @@ class UserConfigView(LoginRequiredMixin, View):
             form.save()
             form.save()
 
 
             messages.success(request, "Your preferences have been updated.")
             messages.success(request, "Your preferences have been updated.")
-            return redirect('users:preferences')
+            return redirect('account:preferences')
 
 
         return render(request, self.template_name, {
         return render(request, self.template_name, {
             'form': form,
             'form': form,
@@ -208,7 +208,7 @@ class ChangePasswordView(LoginRequiredMixin, View):
         # LDAP users cannot change their password here
         # LDAP users cannot change their password here
         if getattr(request.user, 'ldap_username', None):
         if getattr(request.user, 'ldap_username', None):
             messages.warning(request, "LDAP-authenticated user credentials cannot be changed within NetBox.")
             messages.warning(request, "LDAP-authenticated user credentials cannot be changed within NetBox.")
-            return redirect('users:profile')
+            return redirect('account:profile')
 
 
         form = forms.PasswordChangeForm(user=request.user)
         form = forms.PasswordChangeForm(user=request.user)
 
 
@@ -223,7 +223,7 @@ class ChangePasswordView(LoginRequiredMixin, View):
             form.save()
             form.save()
             update_session_auth_hash(request, form.user)
             update_session_auth_hash(request, form.user)
             messages.success(request, "Your password has been changed successfully.")
             messages.success(request, "Your password has been changed successfully.")
-            return redirect('users:profile')
+            return redirect('account:profile')
 
 
         return render(request, self.template_name, {
         return render(request, self.template_name, {
             'form': form,
             'form': form,
@@ -292,7 +292,7 @@ class UserTokenEditView(LoginRequiredMixin, View):
         return render(request, 'generic/object_edit.html', {
         return render(request, 'generic/object_edit.html', {
             'object': token,
             'object': token,
             'form': form,
             'form': form,
-            'return_url': reverse('users:usertoken_list'),
+            'return_url': reverse('account:usertoken_list'),
         })
         })
 
 
     def post(self, request, pk=None):
     def post(self, request, pk=None):
@@ -320,12 +320,12 @@ class UserTokenEditView(LoginRequiredMixin, View):
             elif '_addanother' in request.POST:
             elif '_addanother' in request.POST:
                 return redirect(request.path)
                 return redirect(request.path)
             else:
             else:
-                return redirect('users:usertoken_list')
+                return redirect('account:usertoken_list')
 
 
         return render(request, 'generic/object_edit.html', {
         return render(request, 'generic/object_edit.html', {
             'object': token,
             'object': token,
             'form': form,
             'form': form,
-            'return_url': reverse('users:usertoken_list'),
+            'return_url': reverse('account:usertoken_list'),
             'disable_addanother': not settings.ALLOW_TOKEN_RETRIEVAL
             'disable_addanother': not settings.ALLOW_TOKEN_RETRIEVAL
         })
         })
 
 
@@ -339,7 +339,7 @@ class UserTokenDeleteView(LoginRequiredMixin, View):
         return render(request, 'generic/object_delete.html', {
         return render(request, 'generic/object_delete.html', {
             'object': token,
             'object': token,
             'form': ConfirmationForm(),
             'form': ConfirmationForm(),
-            'return_url': reverse('users:usertoken_list'),
+            'return_url': reverse('account:usertoken_list'),
         })
         })
 
 
     def post(self, request, pk):
     def post(self, request, pk):
@@ -349,12 +349,12 @@ class UserTokenDeleteView(LoginRequiredMixin, View):
         if form.is_valid():
         if form.is_valid():
             token.delete()
             token.delete()
             messages.success(request, "Token deleted")
             messages.success(request, "Token deleted")
-            return redirect('users:usertoken_list')
+            return redirect('account:usertoken_list')
 
 
         return render(request, 'generic/object_delete.html', {
         return render(request, 'generic/object_delete.html', {
             'object': token,
             'object': token,
             'form': form,
             'form': form,
-            'return_url': reverse('users:usertoken_list'),
+            'return_url': reverse('account:usertoken_list'),
         })
         })