# ~*~ coding: utf-8 ~*~ from __future__ import unicode_literals import logging from django.shortcuts import get_object_or_404, reverse, render from django.http import HttpResponseRedirect from django.urls import reverse_lazy from django.db.models import Q from django.views.generic.base import View from django.views.generic.list import ListView from django.views.generic.edit import CreateView, DeleteView, UpdateView, ProcessFormView, FormView from django.views.generic.detail import DetailView from django.contrib.messages.views import SuccessMessageMixin from django.conf import settings from .models import User, UserGroup from .forms import UserAddForm, UserUpdateForm, UserGroupForm, UserLoginForm from .utils import AdminUserRequiredMixin, ssh_key_gen, user_add_success_next logger = logging.getLogger('jumpserver.users.views') class UserListView(AdminUserRequiredMixin, ListView): model = User paginate_by = settings.CONFIG.DISPLAY_PER_PAGE context_object_name = 'user_list' template_name = 'users/user_list.html' ordering = '-date_joined' def get_queryset(self): self.queryset = super(UserListView, self).get_queryset() self.keyword = keyword = self.request.GET.get('keyword', '') self.sort = sort = self.request.GET.get('sort') if keyword: self.queryset = self.queryset.filter(Q(username__icontains=keyword) | Q(name__icontains=keyword)) if sort: self.queryset = self.queryset.order_by(sort) return self.queryset def get_context_data(self, **kwargs): context = super(UserListView, self).get_context_data(**kwargs) context.update({'app': '用户管理', 'action': '用户列表', 'keyword': self.keyword}) return context class UserAddView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): model = User form_class = UserAddForm template_name = 'users/user_add.html' success_url = reverse_lazy('users:user-list') success_message = '添加用户 %s 成功 .' def get_context_data(self, **kwargs): context = super(UserAddView, self).get_context_data(**kwargs) context.update({'app': '用户管理', 'action': '用户添加'}) return context def form_valid(self, form): user = form.save(commit=False) user.created_by = self.request.user.username or 'System' user.save() user_add_success_next(user) return super(UserAddView, self).form_valid(form) def get_success_message(self, cleaned_data): return self.success_message % ( reverse_lazy('users:user-detail', kwargs={'pk': self.object.pk}), self.object.name, ) class UserUpdateView(AdminUserRequiredMixin, UpdateView): model = User form_class = UserUpdateForm template_name = 'users/user_edit.html' context_object_name = 'user' success_url = reverse_lazy('users:user-list') def form_valid(self, form): username = self.object.username user = form.save(commit=False) user.username = username user.save() password = self.request.POST.get('password', '') if password: user.set_password(password) return super(UserUpdateView, self).form_valid(form) def form_invalid(self, form): print(form.errors) return super(UserUpdateView, self).form_invalid(form) def get_context_data(self, **kwargs): context = super(UserUpdateView, self).get_context_data(**kwargs) context.update({'app': '用户管理', 'action': '用户编辑'}) return context class UserDeleteView(AdminUserRequiredMixin, DeleteView): model = User success_url = reverse_lazy('users:user-list') template_name = 'users/user_delete_confirm.html' class UserDetailView(AdminUserRequiredMixin, DetailView): model = User template_name = 'users/user_detail.html' context_object_name = "user" def get_context_data(self, **kwargs): context = super(UserDetailView, self).get_context_data(**kwargs) groups = [group for group in UserGroup.objects.iterator() if group not in self.object.groups.iterator()] context.update({'app': '用户管理', 'action': '用户详情', 'groups': groups}) return context class UserGroupListView(AdminUserRequiredMixin, ListView): model = UserGroup paginate_by = settings.CONFIG.DISPLAY_PER_PAGE context_object_name = 'usergroup_list' template_name = 'users/usergroup_list.html' ordering = '-date_added' def get_queryset(self): self.queryset = super(UserGroupListView, self).get_queryset() self.keyword = keyword = self.request.GET.get('keyword', '') self.sort = sort = self.request.GET.get('sort') if keyword: self.queryset = self.queryset.filter(name__icontains=keyword) if sort: self.queryset = self.queryset.order_by(sort) return self.queryset def get_context_data(self, **kwargs): context = super(UserGroupListView, self).get_context_data(**kwargs) context.update({'app': '用户管理', 'action': '用户组列表', 'keyword': self.keyword}) return context class UserGroupAddView(AdminUserRequiredMixin, CreateView): model = UserGroup form_class = UserGroupForm template_name = 'users/usergroup_add.html' success_url = reverse_lazy('users:usergroup-list') def get_context_data(self, **kwargs): context = super(UserGroupAddView, self).get_context_data(**kwargs) users = User.objects.all() context.update({'app': '用户管理', 'action': '用户组添加', 'users': users}) return context def form_valid(self, form): usergroup = form.save() users_id_list = self.request.POST.getlist('users', []) users = [get_object_or_404(User, id=user_id) for user_id in users_id_list] usergroup.created_by = self.request.user.username or 'Admin' usergroup.users.add(*tuple(users)) usergroup.save() return super(UserGroupAddView, self).form_valid(form) class UserGroupUpdateView(UpdateView): pass class UserGroupDetailView(DetailView): pass class UserGroupDeleteView(DeleteView): pass class UserForgetPasswordView(View): pass class UserRestPasswordView(View): pass