views.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. from django.http import JsonResponse
  2. from utils.fbmsg import FBMsg
  3. from django.contrib import auth
  4. from django.contrib.auth.models import User
  5. import json
  6. from userprofile.models import Users
  7. from staff.models import ListModel as staff
  8. from operation_log.views import log_success_operation, log_failure_operation
  9. def login(request, *args, **kwargs):
  10. post_data = json.loads(request.body.decode())
  11. data = {
  12. "name": post_data.get('name'),
  13. "password": post_data.get('password'),
  14. }
  15. ip = request.META.get('HTTP_X_FORWARDED_FOR') if request.META.get(
  16. 'HTTP_X_FORWARDED_FOR') else request.META.get('REMOTE_ADDR')
  17. if User.objects.filter(username=str(data['name'])).exists():
  18. user = auth.authenticate(username=str(data['name']), password=str(data['password']))
  19. if user is None:
  20. # 记录登录失败日志
  21. try:
  22. log_failure_operation(
  23. request=request,
  24. operation_content=f"用户登录失败:密码错误 - 用户名:{data['name']}",
  25. operation_level="login",
  26. operator=data.get('name'),
  27. module_name="用户登录"
  28. )
  29. except Exception:
  30. pass
  31. err_ret = FBMsg.err_ret()
  32. err_ret['data'] = data
  33. return JsonResponse(err_ret)
  34. else:
  35. staff_detail = staff.objects.filter(staff_name=str(data['name'])).first()
  36. if staff_detail.is_lock == 1:
  37. # 记录登录失败日志(账号被锁定)
  38. try:
  39. log_failure_operation(
  40. request=request,
  41. operation_content=f"用户登录失败:账号已被锁定 - 用户名:{data['name']}",
  42. operation_level="login",
  43. operator=data.get('name'),
  44. module_name="用户登录"
  45. )
  46. except Exception:
  47. pass
  48. err_ret = FBMsg.err_lock_staff()
  49. err_ret['data'] = data
  50. return JsonResponse(err_ret)
  51. else:
  52. data = {
  53. "name": data['name'],
  54. 'openid': staff_detail.openid,
  55. "user_id": staff_detail.id,
  56. "appid": staff_detail.appid,
  57. "staff_type" : staff_detail.staff_type,
  58. }
  59. ret = FBMsg.ret()
  60. ret['ip'] = ip
  61. ret['data'] = data
  62. auth.login(request, user)
  63. # 记录登录成功日志
  64. try:
  65. log_success_operation(
  66. request=request,
  67. operation_content=f"用户登录成功 - 用户名:{data['name']},角色:{staff_detail.staff_type}",
  68. operation_level="login",
  69. operator=data.get('name'),
  70. module_name="用户登录"
  71. )
  72. except Exception:
  73. pass
  74. return JsonResponse(ret)
  75. else:
  76. # 记录登录失败日志(用户不存在)
  77. try:
  78. log_failure_operation(
  79. request=request,
  80. operation_content=f"用户登录失败:用户不存在 - 用户名:{data['name']}",
  81. operation_level="login",
  82. operator=data.get('name'),
  83. module_name="用户登录"
  84. )
  85. except Exception:
  86. pass
  87. err_ret = FBMsg.err_ret()
  88. err_ret['ip'] = ip
  89. err_ret['data'] = data
  90. return JsonResponse(err_ret)