You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.5 KiB
Python
105 lines
3.5 KiB
Python
import logging
|
|
|
|
from django.db.models import Count
|
|
from django.shortcuts import render
|
|
from django.views.decorators.http import require_http_methods
|
|
|
|
# Create your views here.
|
|
from rest_framework import viewsets
|
|
from rest_framework.response import Response
|
|
from app.models import TP
|
|
from app.serializers import SerialMyModel, SerialFilter
|
|
from app.pagination import MyPageNumberPagination
|
|
from user.models import UserProfile
|
|
from django.contrib.auth import authenticate, login, logout
|
|
from .utils import generate_token, decode_token_exp_time
|
|
|
|
logger = logging.getLogger('mylogger')
|
|
|
|
|
|
class ModelQuery(viewsets.ModelViewSet):
|
|
# 查询类
|
|
queryset = TP.objects.all().order_by("-uid") # 按照uid倒序
|
|
# 序列化类
|
|
serializer_class = SerialMyModel
|
|
# 分页类
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
# 条件筛选
|
|
filterset_class = SerialFilter
|
|
|
|
def query_event(self, request, *args, **kwargs):
|
|
res = TP.objects.values('event_type').annotate(count=Count('event_type')).order_by('-count')
|
|
result = list(res)
|
|
data = dict()
|
|
for index, item in enumerate(result, 1):
|
|
data[index] = item.get('event_type')
|
|
response = {
|
|
'success': True,
|
|
'msg': '查询成功',
|
|
'data': data
|
|
}
|
|
return Response(response)
|
|
|
|
|
|
class RegisterLoginViewSet(viewsets.ModelViewSet):
|
|
def tp_register(self, request, *args, **kwargs):
|
|
"""注册 POST"""
|
|
# 判断用户是否为管理员
|
|
# user = request.user
|
|
# if not user.is_superuser:
|
|
# return Response({'msg': '您不是管理员,无权限添加成员'})
|
|
data = request.data
|
|
username = data.get('username')
|
|
password = data.get('password')
|
|
try:
|
|
if UserProfile.objects.filter(username=username).first():
|
|
return Response({'msg': '该用户名已存在,请换一个'})
|
|
UserProfile.objects.create_user(username=username, password=password)
|
|
return Response({'msg': '注册成功'})
|
|
except Exception as e:
|
|
logger.info(e)
|
|
response = {
|
|
"msg": f'注册失败, 原因:{e}'
|
|
}
|
|
return Response(response)
|
|
|
|
|
|
class LoginView(viewsets.ModelViewSet):
|
|
def tp_login(self, request, *args, **kwargs):
|
|
"""登录 POST"""
|
|
data = request.data
|
|
username = data.get('username')
|
|
password = data.get('password')
|
|
login_user = authenticate(username=username, password=password)
|
|
if login_user and login_user.is_active:
|
|
# 生成token
|
|
token = generate_token(login_user)
|
|
response = {
|
|
'success': True,
|
|
'msg': '登录成功',
|
|
'data': {
|
|
'username': login_user.username,
|
|
'roles': ['admin'] if login_user.is_superuser else ['common'],
|
|
'accessToken': token,
|
|
'expires': decode_token_exp_time(token)
|
|
}
|
|
}
|
|
return Response(response)
|
|
else:
|
|
response = {
|
|
'success': False,
|
|
'msg': '登录失败',
|
|
'data': {
|
|
'username': None,
|
|
'roles': [],
|
|
'accessToken': None,
|
|
'expires': None
|
|
}
|
|
}
|
|
return Response(response)
|
|
|
|
def tp_logout(self, request, *args, **kwargs):
|
|
"""登出 GET"""
|
|
pass
|