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)