320 lines
12 KiB
Python
320 lines
12 KiB
Python
# -*- coding: utf-8 -*-
|
|
import json
|
|
|
|
from datetime import datetime
|
|
from django.urls import reverse
|
|
from django.conf import settings
|
|
from django.contrib import messages
|
|
from django.contrib.auth import views
|
|
from django.views.decorators.http import require_GET
|
|
from django.utils.translation import ugettext_lazy as _
|
|
# from django.utils import timezone
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.contrib.auth import logout, authenticate, login
|
|
from django.shortcuts import render, redirect, get_object_or_404
|
|
from django.http import HttpResponse,HttpResponseRedirect
|
|
from django.contrib.auth.hashers import make_password
|
|
from django.views.generic import ListView
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
from django.db.models import Q
|
|
from auto_auth.models import User
|
|
from automatic.management.models import Product, UserAndProduct
|
|
from automatic.signals import USER_REGISTERED_SIGNAL
|
|
from auto_auth.forms import RegistrationForm
|
|
from auto_auth.models import UserActivationKey
|
|
|
|
|
|
class LoginViewWithCustomTemplate(views.LoginView):
|
|
def get_template_names(self):
|
|
return ['registration/custom_login.html', 'registration/login.html']
|
|
|
|
|
|
@login_required()
|
|
def index(request):
|
|
return render(request, 'index.html')
|
|
|
|
|
|
def register(request):
|
|
"""Register method of account"""
|
|
if request.method == 'POST':
|
|
form = RegistrationForm(data=request.POST, files=request.FILES)
|
|
if form.is_valid():
|
|
new_user = form.save()
|
|
activation_key = form.set_activation_key()
|
|
# send a signal that new user has been registered
|
|
USER_REGISTERED_SIGNAL.send(sender=form.__class__,
|
|
request=request,
|
|
user=new_user)
|
|
|
|
# Send confirmation email to new user
|
|
if settings.DEFAULT_FROM_EMAIL and settings.AUTO_APPROVE_NEW_USERS:
|
|
form.send_confirm_mail(request, activation_key)
|
|
|
|
messages.add_message(
|
|
request,
|
|
messages.SUCCESS,
|
|
_('Your account has been created, please check your mailbox for confirmation')
|
|
)
|
|
else:
|
|
messages.add_message(
|
|
request,
|
|
messages.WARNING,
|
|
_('Your account has been created, but you need an administrator to activate it')
|
|
)
|
|
messages.add_message(
|
|
request,
|
|
messages.INFO,
|
|
_('Following is the administrator list')
|
|
)
|
|
|
|
# super-users can approve others
|
|
for user in User.objects.filter(is_superuser=True):
|
|
messages.add_message(
|
|
request,
|
|
messages.INFO,
|
|
'<a href="mailto:{}">{}</a>'.format(user.email,
|
|
user.get_full_name() or user.username)
|
|
)
|
|
|
|
# site admins should be able to do so too
|
|
for name, email in settings.ADMINS:
|
|
messages.add_message(
|
|
request,
|
|
messages.WARNING,
|
|
'<a href="mailto:{}">{}</a>'.format(email, name)
|
|
)
|
|
|
|
return HttpResponseRedirect(reverse('core-views-index'))
|
|
else:
|
|
form = RegistrationForm()
|
|
|
|
context_data = {
|
|
'form': form,
|
|
}
|
|
return render(request, 'registration/registration_form.html', context_data)
|
|
|
|
|
|
@require_GET
|
|
def confirm(request, activation_key):
|
|
"""Confirm the user registration"""
|
|
|
|
# Get the object
|
|
try:
|
|
_activation_key = UserActivationKey.objects.select_related('user')
|
|
_activation_key = _activation_key.get(activation_key=activation_key)
|
|
except UserActivationKey.DoesNotExist:
|
|
messages.add_message(
|
|
request,
|
|
messages.ERROR,
|
|
_('This activation key no longer exists in the database')
|
|
)
|
|
return HttpResponseRedirect(request.GET.get('next', reverse('core-views-index')))
|
|
|
|
if _activation_key.key_expires <= datetime.now():
|
|
messages.add_message(request, messages.ERROR, _('This activation key has expired'))
|
|
return HttpResponseRedirect(request.GET.get('next', reverse('core-views-index')))
|
|
|
|
# All thing done, start to active the user and use the user login
|
|
user = _activation_key.user
|
|
user.is_active = True
|
|
user.save(update_fields=['is_active'])
|
|
_activation_key.delete()
|
|
|
|
messages.add_message(
|
|
request,
|
|
messages.SUCCESS,
|
|
_('Your account has been activated successfully')
|
|
)
|
|
return HttpResponseRedirect(request.GET.get('next', reverse('core-views-index')))
|
|
|
|
|
|
def profile(request, username):
|
|
"""Show user profiles"""
|
|
user = get_object_or_404(User, username=username)
|
|
return HttpResponseRedirect(reverse('admin:auth_user_change', args=[user.pk]))
|
|
|
|
|
|
def verify(request, query_dict):
|
|
"""验证用户名密码"""
|
|
user = authenticate(username=query_dict["username"], password=query_dict["password"])
|
|
if user is not None:
|
|
login(request, user)
|
|
return "verify_success"
|
|
else:
|
|
return u"用户名密码错误"
|
|
|
|
|
|
def login_page(request):
|
|
if request.method == "POST":
|
|
return HttpResponse(verify(request, request.POST))
|
|
return render(request, "registration/login.html")
|
|
|
|
|
|
def _logout(request):
|
|
logout(request)
|
|
return redirect("/login")
|
|
|
|
@csrf_exempt
|
|
@login_required()
|
|
def add_user(request):
|
|
if request.method == 'POST':
|
|
post_dict = request.POST
|
|
user_dict = {"username": post_dict['username'],
|
|
"realname": post_dict['realname'],
|
|
"password":post_dict['password'],
|
|
"email": post_dict['email'],
|
|
"mobile": post_dict['mobile'],
|
|
"dept": post_dict['dept'],
|
|
"testrailuser": post_dict['testrailuser'] if 'testrailuser' in post_dict else None,
|
|
"testrailpass": post_dict['testrailpass'] if 'testrailpass' in post_dict else None,
|
|
}
|
|
if 'is_admin' in post_dict:
|
|
is_admin = True
|
|
is_staff = True
|
|
else:
|
|
is_admin = False
|
|
is_staff = False
|
|
|
|
if 'is_active' in post_dict:
|
|
is_active = True
|
|
else:
|
|
is_active = False
|
|
username = user_dict.get('username')
|
|
password = make_password(user_dict.get('password'), None, 'pbkdf2_sha256')
|
|
realname = user_dict.get('realname')
|
|
email = user_dict.get('email')
|
|
mobile = user_dict.get('mobile')
|
|
dept = user_dict.get('dept')
|
|
# is_admin = is_admin
|
|
# is_active = is_active
|
|
testrailuser = user_dict.get('testrailuser')
|
|
testrailpass = user_dict.get('testrailpass')
|
|
# print username,password,realname,email,mobile,is_admin,is_active,testrailuser,testrailpass
|
|
try:
|
|
User.objects.get(username=username).username
|
|
return HttpResponse('用户名已经存在')
|
|
except:
|
|
pass
|
|
try:
|
|
User.objects.get(email=email).email
|
|
return HttpResponse('邮箱地址已经被注册')
|
|
except:
|
|
pass
|
|
user = User(username=username, password=password, realname=realname, email=email, mobile=mobile, dept=dept,
|
|
is_active=is_active, is_admin=is_admin, is_staff=is_staff,
|
|
testrailuser=testrailuser, testrailpass=testrailpass)
|
|
user.save()
|
|
return HttpResponse('创建成功')
|
|
else:
|
|
return HttpResponse('创建失败')
|
|
|
|
|
|
@csrf_exempt
|
|
@login_required()
|
|
def update_user(request):
|
|
if request.method == 'POST':
|
|
post_dict = request.POST
|
|
user_dict = {"userid":post_dict['userid'],
|
|
"username": post_dict['username'],
|
|
"password": post_dict['password'],
|
|
"email":post_dict['email'],
|
|
"mobile": post_dict['mobile'],
|
|
"dept": post_dict['dept'],
|
|
"realname": post_dict['realname'],
|
|
"testrailuser": post_dict['testrailuser'] if 'testrailuser' in post_dict else None,
|
|
"testrailpass": post_dict['testrailpass'] if 'testrailpass' in post_dict else None,
|
|
}
|
|
if 'is_admin' in post_dict:
|
|
is_admin = True
|
|
is_staff = True
|
|
else:
|
|
is_admin = False
|
|
is_staff = False
|
|
if 'is_active' in post_dict:
|
|
is_active = True
|
|
else:
|
|
is_active = False
|
|
userid = user_dict.get('userid')
|
|
username = user_dict.get('username')
|
|
realname = user_dict.get('realname')
|
|
email = user_dict.get('email')
|
|
mobile = user_dict.get('mobile')
|
|
dept_str = user_dict.get('dept')
|
|
dept = dept_str if dept_str else '测试'
|
|
# is_admin = is_admin
|
|
# is_active = is_active
|
|
testrailuser = user_dict.get('testrailuser')
|
|
testrailpass = user_dict.get('testrailpass')
|
|
# updatetime = timezone.now()
|
|
u = User.objects.filter(id=int(userid))
|
|
# passwd = user_dict.get('password')
|
|
if user_dict.get('password') == '':
|
|
# print "AAA",username,user_dict.get('password')
|
|
u.update(username=username, realname=realname, email=email,mobile=mobile, dept=dept,is_active=is_active,
|
|
is_admin=is_admin, is_staff=is_staff, testrailuser=testrailuser,testrailpass=testrailpass)
|
|
else:
|
|
# print "BBB", username, user_dict.get('password')
|
|
password = make_password(user_dict.get('password'), None, 'pbkdf2_sha256')
|
|
u.update(username=username, password=password, realname=realname, dept=dept, email=email, mobile=mobile, is_active=is_active,
|
|
is_admin=is_admin, testrailuser=testrailuser, testrailpass=testrailpass)
|
|
return HttpResponse('修改成功')
|
|
else:
|
|
return HttpResponse('修改失败')
|
|
|
|
|
|
@csrf_exempt
|
|
def del_user(request,id):
|
|
user = get_object_or_404(User, pk=int(id))
|
|
user.delete()
|
|
return HttpResponseRedirect(reverse('userlist'))
|
|
|
|
|
|
@csrf_exempt
|
|
@login_required()
|
|
def set_edit_user(request):
|
|
userid = request.GET['userid']
|
|
user = User.objects.get(pk=userid)
|
|
userinfo = {}
|
|
userinfo['id'] = user.pk
|
|
userinfo['username'] = user.username
|
|
userinfo['password'] = user.password
|
|
userinfo['email'] = user.email
|
|
userinfo['mobile'] = user.mobile
|
|
userinfo['is_admin'] = user.is_admin
|
|
userinfo['is_staff'] = user.is_staff
|
|
userinfo['is_active'] = user.is_active
|
|
userinfo['realname'] = user.realname
|
|
userinfo['dept'] = user.dept
|
|
userinfo['testrailuser'] = user.testrailuser
|
|
userinfo['testrailpass'] = user.testrailpass
|
|
userlist = [userinfo]
|
|
return HttpResponse(json.dumps(userlist))
|
|
|
|
|
|
class UserListIndex(ListView):
|
|
context_object_name = 'userlist'
|
|
template_name = 'oauth/userlist.html'
|
|
paginate_by = 10
|
|
model = User
|
|
usersum = 0
|
|
http_method_names = [u'get']
|
|
alluser=[]
|
|
|
|
def get_queryset(self):
|
|
userlist = User.objects.all().order_by('-pk')
|
|
self.alluser = User.objects.filter(is_active='True')
|
|
keyword = self.request.GET.get('keyword')
|
|
if keyword:
|
|
userlist = userlist.filter(Q(username__icontains=keyword)|Q(email__icontains=keyword)|Q(mobile__icontains=keyword))
|
|
self.usersum = len(userlist)
|
|
return userlist
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(UserListIndex,self).get_context_data(**kwargs)
|
|
# userlist = User.objects.values('username').annotate()
|
|
context['productlist'] = Product.objects.all().order_by('-sortby')
|
|
context['userandproduct'] = UserAndProduct.objects.all()
|
|
context['usersum'] = self.usersum
|
|
context['alluser']=self.alluser
|
|
return context
|