Clean up users & account URLs

This commit is contained in:
Jeremy Stretch 2023-07-25 15:48:40 -04:00
parent 154b8236a2
commit 9b6e32896d
13 changed files with 47 additions and 35 deletions

View File

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

View File

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

View File

@ -19,22 +19,22 @@
{% endif %}
</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
</a>
</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
</a>
</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
</a>
</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
</a>
</li>

View File

@ -4,21 +4,21 @@
{% block tabs %}
<ul class="nav nav-tabs px-3">
<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 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 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>
{% if not request.user.ldap_username %}
<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>
{% endif %}
<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>
</ul>
{% endblock %}

View File

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

View File

@ -13,7 +13,7 @@
{% render_field form.new_password2 %}
</div>
<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>
</div>
</form>

View File

@ -79,7 +79,7 @@
</div>
<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>
</div>
</form>

View File

@ -5,7 +5,7 @@
{% load plugins %}
{% 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 %}
{% block title %}{% trans "Token" %} {{ object }}{% endblock %}

View File

@ -7,7 +7,7 @@
{% block content %}
<div class="row">
<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
</a>
</div>

View File

@ -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'))),
]

View File

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

View File

@ -6,15 +6,6 @@ from . import views
app_name = 'users'
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
path('tokens/', views.TokenListView.as_view(), name='token_list'),
path('tokens/add/', views.TokenEditView.as_view(), name='token_add'),

View File

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