from django.http import JsonResponse from utils.fbmsg import FBMsg from django.contrib import auth from django.contrib.auth.models import User import json from userprofile.models import Users from staff.models import ListModel as staff from operation_log.views import log_success_operation, log_failure_operation def login(request, *args, **kwargs): post_data = json.loads(request.body.decode()) data = { "name": post_data.get('name'), "password": post_data.get('password'), } ip = request.META.get('HTTP_X_FORWARDED_FOR') if request.META.get( 'HTTP_X_FORWARDED_FOR') else request.META.get('REMOTE_ADDR') if User.objects.filter(username=str(data['name'])).exists(): user = auth.authenticate(username=str(data['name']), password=str(data['password'])) if user is None: # 记录登录失败日志 try: log_failure_operation( request=request, operation_content=f"用户登录失败:密码错误 - 用户名:{data['name']}", operation_level="login", operator=data.get('name'), module_name="用户登录" ) except Exception: pass err_ret = FBMsg.err_ret() err_ret['data'] = data return JsonResponse(err_ret) else: staff_detail = staff.objects.filter(staff_name=str(data['name'])).first() if staff_detail.is_lock == 1: # 记录登录失败日志(账号被锁定) try: log_failure_operation( request=request, operation_content=f"用户登录失败:账号已被锁定 - 用户名:{data['name']}", operation_level="login", operator=data.get('name'), module_name="用户登录" ) except Exception: pass err_ret = FBMsg.err_lock_staff() err_ret['data'] = data return JsonResponse(err_ret) else: data = { "name": data['name'], 'openid': staff_detail.openid, "user_id": staff_detail.id, "appid": staff_detail.appid, "staff_type" : staff_detail.staff_type, } ret = FBMsg.ret() ret['ip'] = ip ret['data'] = data auth.login(request, user) # 记录登录成功日志 try: log_success_operation( request=request, operation_content=f"用户登录成功 - 用户名:{data['name']},角色:{staff_detail.staff_type}", operation_level="login", operator=data.get('name'), module_name="用户登录" ) except Exception: pass return JsonResponse(ret) else: # 记录登录失败日志(用户不存在) try: log_failure_operation( request=request, operation_content=f"用户登录失败:用户不存在 - 用户名:{data['name']}", operation_level="login", operator=data.get('name'), module_name="用户登录" ) except Exception: pass err_ret = FBMsg.err_ret() err_ret['ip'] = ip err_ret['data'] = data return JsonResponse(err_ret)