Parcourir la source

Converted all user views to CBVs

Jeremy Stretch il y a 8 ans
Parent
commit
e6b4d87939
3 fichiers modifiés avec 98 ajouts et 65 suppressions
  1. 3 3
      netbox/netbox/urls.py
  2. 5 5
      netbox/users/urls.py
  3. 90 57
      netbox/users/views.py

+ 3 - 3
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')),

+ 5 - 5
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<pk>\d+)/edit/$', views.TokenEditView.as_view(), name='token_edit'),
     url(r'^api-tokens/(?P<pk>\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'),
 
 ]

+ 90 - 57
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, self.template_name, {
+            'form': form,
+        })
 
-    return render(request, 'login.html', {
-        'form': form,
-    })
 
+class LogoutView(View):
 
-def logout(request):
+    def get(self, request):
+        auth_logout(request)
+        messages.info(request, u"You have logged out.")
 
-    auth_logout(request)
-    messages.info(request, u"You have logged out.")
-    return HttpResponseRedirect(reverse('home'))
+        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'
+
+    def get(self, request):
+        form = PasswordChangeForm(user=request.user)
+
+        return render(request, self.template_name, {
+            'form': form,
+            'active_tab': 'change_password',
+        })
 
-    if request.method == 'POST':
+    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, self.template_name, {
+            'form': form,
+            'active_tab': 'change_password',
+        })
 
-    return render(request, 'users/change_password.html', {
-        'form': form,
-        'active_tab': 'change_password',
-    })
 
+@method_decorator(login_required, name='dispatch')
+class UserKeyView(View):
+    template_name = 'users/userkey.html'
 
-@login_required()
-def userkey(request):
+    def get(self, request):
+        try:
+            userkey = UserKey.objects.get(user=request.user)
+        except UserKey.DoesNotExist:
+            userkey = None
+
+        return render(request, self.template_name, {
+            'userkey': userkey,
+            'active_tab': 'userkey',
+        })
 
-    try:
-        userkey = UserKey.objects.get(user=request.user)
-    except UserKey.DoesNotExist:
-        userkey = None
 
-    return render(request, 'users/userkey.html', {
-        'userkey': userkey,
-        'active_tab': 'userkey',
-    })
+class UserKeyEditView(View):
+    template_name = 'users/userkey_edit.html'
 
+    @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)
 
-@login_required()
-def userkey_edit(request):
+        return super(UserKeyEditView, self).dispatch(request, *args, **kwargs)
 
-    try:
-        userkey = UserKey.objects.get(user=request.user)
-    except UserKey.DoesNotExist:
-        userkey = UserKey(user=request.user)
+    def get(self, request):
+        form = UserKeyForm(instance=self.userkey)
 
-    if request.method == 'POST':
-        form = UserKeyForm(data=request.POST, instance=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'
+
+    def get(self, request):
 
-    return render(request, 'users/recent_activity.html', {
-        'recent_activity': request.user.actions.all()[:50],
-        'active_tab': 'recent_activity',
-    })
+        return render(request, self.template_name, {
+            'recent_activity': request.user.actions.all()[:50],
+            'active_tab': 'recent_activity',
+        })
 
 
 #