From e6b4d8793960d9b3047a41e885a2db1038f77797 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 19 May 2017 15:47:19 -0400 Subject: [PATCH] Converted all user views to CBVs --- netbox/netbox/urls.py | 6 +- netbox/users/urls.py | 10 +-- netbox/users/views.py | 151 +++++++++++++++++++++++++----------------- 3 files changed, 100 insertions(+), 67 deletions(-) diff --git a/netbox/netbox/urls.py b/netbox/netbox/urls.py index 7e3ab8924..a1e7eb351 100644 --- a/netbox/netbox/urls.py +++ b/netbox/netbox/urls.py @@ -6,7 +6,7 @@ from django.contrib import admin from django.views.static import serve from netbox.views import APIRootView, home, handle_500, SearchView, trigger_500 -from users.views import login, logout +from users.views import LoginView, LogoutView handler500 = handle_500 @@ -19,8 +19,8 @@ _patterns = [ url(r'^search/$', SearchView.as_view(), name='search'), # Login/logout - url(r'^login/$', login, name='login'), - url(r'^logout/$', logout, name='logout'), + url(r'^login/$', LoginView.as_view(), name='login'), + url(r'^logout/$', LogoutView.as_view(), name='logout'), # Apps url(r'^circuits/', include('circuits.urls')), diff --git a/netbox/users/urls.py b/netbox/users/urls.py index ab714f49b..3183e5063 100644 --- a/netbox/users/urls.py +++ b/netbox/users/urls.py @@ -6,15 +6,15 @@ from . import views app_name = 'user' urlpatterns = [ - url(r'^profile/$', views.profile, name='profile'), - url(r'^password/$', views.change_password, name='change_password'), + url(r'^profile/$', views.ProfileView.as_view(), name='profile'), + url(r'^password/$', views.ChangePasswordView.as_view(), name='change_password'), url(r'^api-tokens/$', views.TokenListView.as_view(), name='token_list'), url(r'^api-tokens/add/$', views.TokenEditView.as_view(), name='token_add'), url(r'^api-tokens/(?P\d+)/edit/$', views.TokenEditView.as_view(), name='token_edit'), url(r'^api-tokens/(?P\d+)/delete/$', views.TokenDeleteView.as_view(), name='token_delete'), - url(r'^user-key/$', views.userkey, name='userkey'), - url(r'^user-key/edit/$', views.userkey_edit, name='userkey_edit'), + url(r'^user-key/$', views.UserKeyView.as_view(), name='userkey'), + url(r'^user-key/edit/$', views.UserKeyEditView.as_view(), name='userkey_edit'), url(r'^session-key/delete/$', views.SessionKeyDeleteView.as_view(), name='sessionkey_delete'), - url(r'^recent-activity/$', views.recent_activity, name='recent_activity'), + url(r'^recent-activity/$', views.RecentActivityView.as_view(), name='recent_activity'), ] diff --git a/netbox/users/views.py b/netbox/users/views.py index d88217f40..15f4bd55f 100644 --- a/netbox/users/views.py +++ b/netbox/users/views.py @@ -5,6 +5,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse +from django.utils.decorators import method_decorator from django.utils.http import is_safe_url from django.views.generic import View @@ -19,9 +20,17 @@ from .models import Token # Login/logout # -def login(request): +class LoginView(View): + template_name = 'login.html' - if request.method == 'POST': + def get(self, request): + form = LoginForm(request) + + return render(request, self.template_name, { + 'form': form, + }) + + def post(self, request): form = LoginForm(request, data=request.POST) if form.is_valid(): @@ -36,37 +45,48 @@ def login(request): return HttpResponseRedirect(redirect_to) - else: - form = LoginForm() - - return render(request, 'login.html', { - 'form': form, - }) + return render(request, self.template_name, { + 'form': form, + }) -def logout(request): +class LogoutView(View): - auth_logout(request) - messages.info(request, u"You have logged out.") - return HttpResponseRedirect(reverse('home')) + def get(self, request): + auth_logout(request) + messages.info(request, u"You have logged out.") + + return HttpResponseRedirect(reverse('home')) # # User profiles # -@login_required() -def profile(request): +@method_decorator(login_required, name='dispatch') +class ProfileView(View): + template_name = 'users/profile.html' - return render(request, 'users/profile.html', { - 'active_tab': 'profile', - }) + def get(self, request): + + return render(request, self.template_name, { + 'active_tab': 'profile', + }) -@login_required() -def change_password(request): +@method_decorator(login_required, name='dispatch') +class ChangePasswordView(View): + template_name = 'users/change_password.html' - if request.method == 'POST': + def get(self, request): + form = PasswordChangeForm(user=request.user) + + return render(request, self.template_name, { + 'form': form, + 'active_tab': 'change_password', + }) + + def post(self, request): form = PasswordChangeForm(user=request.user, data=request.POST) if form.is_valid(): form.save() @@ -74,39 +94,51 @@ def change_password(request): messages.success(request, u"Your password has been changed successfully.") return redirect('user:profile') - else: - form = PasswordChangeForm(user=request.user) - - return render(request, 'users/change_password.html', { - 'form': form, - 'active_tab': 'change_password', - }) + return render(request, self.template_name, { + 'form': form, + 'active_tab': 'change_password', + }) -@login_required() -def userkey(request): +@method_decorator(login_required, name='dispatch') +class UserKeyView(View): + template_name = 'users/userkey.html' - try: - userkey = UserKey.objects.get(user=request.user) - except UserKey.DoesNotExist: - userkey = None + def get(self, request): + try: + userkey = UserKey.objects.get(user=request.user) + except UserKey.DoesNotExist: + userkey = None - return render(request, 'users/userkey.html', { - 'userkey': userkey, - 'active_tab': 'userkey', - }) + return render(request, self.template_name, { + 'userkey': userkey, + 'active_tab': 'userkey', + }) -@login_required() -def userkey_edit(request): +class UserKeyEditView(View): + template_name = 'users/userkey_edit.html' - try: - userkey = UserKey.objects.get(user=request.user) - except UserKey.DoesNotExist: - userkey = UserKey(user=request.user) + @method_decorator(login_required) + def dispatch(self, request, *args, **kwargs): + try: + self.userkey = UserKey.objects.get(user=request.user) + except UserKey.DoesNotExist: + self.userkey = UserKey(user=request.user) - if request.method == 'POST': - form = UserKeyForm(data=request.POST, instance=userkey) + return super(UserKeyEditView, self).dispatch(request, *args, **kwargs) + + def get(self, request): + form = UserKeyForm(instance=self.userkey) + + return render(request, self.template_name, { + 'userkey': self.userkey, + 'form': form, + 'active_tab': 'userkey', + }) + + def post(self, request): + form = UserKeyForm(data=request.POST, instance=self.userkey) if form.is_valid(): uk = form.save(commit=False) uk.user = request.user @@ -114,16 +146,14 @@ def userkey_edit(request): messages.success(request, u"Your user key has been saved.") return redirect('user:userkey') - else: - form = UserKeyForm(instance=userkey) - - return render(request, 'users/userkey_edit.html', { - 'userkey': userkey, - 'form': form, - 'active_tab': 'userkey', - }) + return render(request, self.template_name, { + 'userkey': self.userkey, + 'form': form, + 'active_tab': 'userkey', + }) +@method_decorator(login_required, name='dispatch') class SessionKeyDeleteView(LoginRequiredMixin, View): def get(self, request): @@ -160,13 +190,16 @@ class SessionKeyDeleteView(LoginRequiredMixin, View): }) -@login_required() -def recent_activity(request): +@method_decorator(login_required, name='dispatch') +class RecentActivityView(View): + template_name = 'users/recent_activity.html' - return render(request, 'users/recent_activity.html', { - 'recent_activity': request.user.actions.all()[:50], - 'active_tab': 'recent_activity', - }) + def get(self, request): + + return render(request, self.template_name, { + 'recent_activity': request.user.actions.all()[:50], + 'active_tab': 'recent_activity', + }) #