Files
VDES_Backend/code/system/apis/login.py

120 lines
3.6 KiB
Python
Raw Normal View History

2026-07-13 15:37:05 +08:00
# -*- coding: utf-8 -*-
# @Time : 2022/5/14 15:05
# @Author : 臧成龙
# @FileName: login.py
# @Software: PyCharm
import json
from datetime import datetime
# from django.core.cache import cache
from django.contrib import auth
from django.forms import model_to_dict
from django.shortcuts import get_object_or_404
from ninja import Router, ModelSchema, Query, Schema, Field
from fuadmin.settings import SECRET_KEY, TOKEN_LIFETIME
from system.models import Users, Role, MenuButton, MenuColumnField
from utils.fu_jwt import FuJwt
from utils.fu_response import FuResponse
from utils.request_util import save_login_log
from utils.usual import get_user_info_from_token
router = Router()
class SchemaOut(ModelSchema):
homePath: str = Field(None, alias="home_path")
class Config:
model = Users
model_exclude = ['password', 'role', 'post']
class LoginSchema(Schema):
username: str = Field(None, alias="username")
password: str = Field(None, alias="password")
class Out(Schema):
multi_depart: str
sysAllDictItems: str
departs: str
userInfo: SchemaOut
token: str
@router.post("/login", response=Out, auth=None)
def login(request, data: LoginSchema):
user_obj = auth.authenticate(request, **data.dict())
if user_obj:
request.user = user_obj
role = user_obj.role.all().values('id')
post = list(user_obj.post.all().values('id'))
role_list = []
post_list = []
for item in role:
role_list.append(item['id'])
for item in post:
post_list.append(item['id'])
user_obj_dic = model_to_dict(user_obj)
user_obj_dic['post'] = post_list
user_obj_dic['role'] = role_list
del user_obj_dic['password']
del user_obj_dic['avatar']
time_now = int(datetime.now().timestamp())
jwt = FuJwt(SECRET_KEY, user_obj_dic, valid_to=time_now + TOKEN_LIFETIME)
# 将生成的token加入缓存
# cache.set(user_obj.id, jwt.encode())
token = f"bearer {jwt.encode()}"
data = {
"multi_depart": 1,
"sysAllDictItems": "q",
"departs": "e",
'userInfo': user_obj_dic,
'token': token
}
save_login_log(request=request)
return data
else:
return FuResponse(code=500, msg="账号/密码错误")
@router.get("/logout", auth=None)
def get_post(request):
# 删除缓存
user_info = get_user_info_from_token(request)
# cache.delete(user_info['id'])
return FuResponse(msg="注销成功")
@router.get("/userinfo", response=SchemaOut)
def get_userinfo(request):
user_info = get_user_info_from_token(request)
user = get_object_or_404(Users, id=user_info['id'])
return user
@router.get("/permCode")
def route_menu_tree(request):
"""用于前端获取当前用户的按钮权限"""
token_user = get_user_info_from_token(request)
user = Users.objects.get(id=token_user['id'])
if not token_user['is_superuser']:
menu_button_ids = user.role.values_list('permission__id', flat=True)
menu_column_ids = user.role.values_list('column__id', flat=True)
# queryset = MenuButton.objects.filter(id__in=menuIds, status=1).values()
queryset_button = MenuButton.objects.filter(id__in=menu_button_ids)
queryset_column = MenuColumnField.objects.filter(id__in=menu_column_ids)
else:
queryset_button = MenuButton.objects.all()
queryset_column = MenuColumnField.objects.all()
queryset = [*queryset_button, *queryset_column]
code_list = []
for item in queryset:
code_list.append(item.code)
return FuResponse(data=code_list)