From 8cc09f0e5ae7715f6175b6d59097d890d096f88f Mon Sep 17 00:00:00 2001
From: xiaoyu <763691951@qq.com>
Date: Tue, 6 Sep 2016 15:03:37 +0800
Subject: [PATCH] move login and logout view back to CBV
---
apps/templates/_user_profile.html | 2 +-
apps/users/urls.py | 24 ++------------
apps/users/views.py | 52 ++++++++++++++++++++++++++++---
3 files changed, 50 insertions(+), 28 deletions(-)
diff --git a/apps/templates/_user_profile.html b/apps/templates/_user_profile.html
index 04a146496..d47ba6537 100644
--- a/apps/templates/_user_profile.html
+++ b/apps/templates/_user_profile.html
@@ -11,7 +11,7 @@
{{ user.name }}
- {{ user.get_role_display | default:{% trans 'User' %} }}
+ {{ user.get_role_display | default:_('User') }}
diff --git a/apps/users/urls.py b/apps/users/urls.py
index e2b0308e8..d93debd11 100644
--- a/apps/users/urls.py
+++ b/apps/users/urls.py
@@ -1,33 +1,13 @@
from django.conf.urls import url
-from django.contrib.auth import views as auth_views
-from django.utils.translation import ugettext as _
import views
import api
-from users.forms import UserLoginForm
-
app_name = 'users'
urlpatterns = [
- url(r'^login$',
- auth_views.login,
- {'template_name': "users/login.html",
- 'authentication_form': UserLoginForm,
- 'redirect_authenticated_user': True},
- name='login'),
- url(r'^logout$',
- auth_views.logout,
- {
- "template_name": "common/flash_message_standalone.html",
- "extra_context": {
- 'title': _('Logout success'),
- 'messages': _('Logout success, return login page'),
- 'redirect_url': '/users/login',
- 'auto_redirect': True,
- }
- },
- name='logout'),
+ url(r'^login$', views.UserLoginView.as_view(), name='login'),
+ url(r'^logout$', views.UserLogoutView.as_view(), name='logout'),
url(r'^password/forget$', views.UserForgetPasswordView.as_view(), name='forget-password'),
url(r'^password/forget/sendmail-success$',
views.UserForgetPasswordSendmailSuccessView.as_view(), name='forget-password-sendmail-success'),
diff --git a/apps/users/views.py b/apps/users/views.py
index 2b2ed441d..f66af95b2 100644
--- a/apps/users/views.py
+++ b/apps/users/views.py
@@ -5,27 +5,69 @@ from __future__ import unicode_literals
import logging
from django.conf import settings
+from django.contrib.auth import login as auth_login, logout as auth_logout
from django.contrib.messages.views import SuccessMessageMixin
from django.db.models import Q
from django.http import HttpResponseRedirect
-from django.shortcuts import get_object_or_404, reverse
-from django.urls import reverse_lazy
+from django.shortcuts import get_object_or_404, reverse, redirect
+from django.utils.decorators import method_decorator
from django.utils.translation import ugettext as _
+from django.urls import reverse_lazy
+from django.views.decorators.cache import never_cache
+from django.views.decorators.csrf import csrf_protect
+from django.views.decorators.debug import sensitive_post_parameters
from django.views.generic.base import TemplateView
from django.views.generic.list import ListView
-from django.views.generic.edit import CreateView, DeleteView, UpdateView
+from django.views.generic.edit import CreateView, DeleteView, UpdateView, FormView
from django.views.generic.detail import DetailView
from common.utils import get_object_or_none
from .models import User, UserGroup
-from .forms import UserAddForm, UserUpdateForm, UserGroupForm
+from .forms import UserAddForm, UserUpdateForm, UserGroupForm, UserLoginForm
from .utils import AdminUserRequiredMixin, user_add_success_next, send_reset_password_mail
logger = logging.getLogger('jumpserver.users.views')
+@method_decorator(sensitive_post_parameters(), name='dispatch')
+@method_decorator(csrf_protect, name='dispatch')
+@method_decorator(never_cache, name='dispatch')
+class UserLoginView(FormView):
+ template_name = 'users/login.html'
+ form_class = UserLoginForm
+ redirect_field_name = 'next'
+
+ def get(self, request, *args, **kwargs):
+ if request.user.is_staff:
+ return redirect(request.POST.get(self.redirect_field_name, reverse('index')))
+ return self.render_to_response(self.get_context_data(**kwargs))
+
+ def form_valid(self, form):
+ auth_login(self.request, form.get_user())
+ return redirect(self.request.POST.get(self.redirect_field_name, reverse('index')))
+
+
+@method_decorator(never_cache, name='dispatch')
+class UserLogoutView(TemplateView):
+ template_name = 'common/flash_message_standalone.html'
+
+ def get(self, request, *args, **kwargs):
+ auth_logout(request)
+ return super(UserLogoutView, self).get(request)
+
+ def get_context_data(self, **kwargs):
+ context = {
+ 'title': _('Logout success'),
+ 'messages': _('Logout success, return login page'),
+ 'redirect_url': reverse('users:login'),
+ 'auto_redirect': True,
+ }
+ kwargs.update(context)
+ return super(UserLogoutView, self).get_context_data(**kwargs)
+
+
class UserListView(AdminUserRequiredMixin, ListView):
model = User
paginate_by = settings.CONFIG.DISPLAY_PER_PAGE
@@ -56,7 +98,7 @@ class UserAddView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView):
form_class = UserAddForm
template_name = 'users/user_add.html'
success_url = reverse_lazy('users:user-list')
- success_message = _('Create user%s success.')
+ success_message = _('Create user %s success.')
def get_context_data(self, **kwargs):
context = super(UserAddView, self).get_context_data(**kwargs)