views.py 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. from django.http import JsonResponse
  2. from userprofile.models import Users
  3. from utils.fbmsg import FBMsg
  4. from utils.md5 import Md5
  5. from django.views.decorators.csrf import csrf_exempt
  6. from django.utils.decorators import method_decorator
  7. from django.contrib import auth
  8. from django.utils import timezone
  9. from django.contrib.auth.models import User
  10. from staff.models import ListModel as staff
  11. import json, random, os
  12. from django.conf import settings
  13. from operation_log.views import log_success_operation, log_failure_operation
  14. @method_decorator(csrf_exempt, name='dispatch')
  15. # 免除视图类的dispatch方法的CSRF验证
  16. def register(request, *args, **kwargs):
  17. post_data = json.loads(request.body.decode())
  18. data = {
  19. "name": post_data.get('name'),
  20. "password1": post_data.get('password1'),
  21. "password2": post_data.get('password2')
  22. }
  23. ip = request.META.get('HTTP_X_FORWARDED_FOR') if request.META.get(
  24. 'HTTP_X_FORWARDED_FOR') else request.META.get('REMOTE_ADDR')
  25. # 检查是否存在开发者用户且未被删除
  26. if Users.objects.filter(name=str(data['name']), developer=1, is_delete=0).exists():
  27. # 记录注册失败日志(用户名已存在)
  28. try:
  29. log_failure_operation(
  30. request=request,
  31. operation_content=f"用户注册失败:用户名已存在 - 用户名:{data['name']}",
  32. operation_level="login",
  33. operator=data.get('name'),
  34. module_name="用户注册"
  35. )
  36. except Exception:
  37. pass
  38. err_user_same = FBMsg.err_user_same()
  39. err_user_same['ip'] = ip
  40. err_user_same['data'] = data['name']
  41. return JsonResponse(err_user_same)
  42. else:
  43. if data.get('password1') is None:
  44. err_password1_empty = FBMsg.err_password1_empty()
  45. err_password1_empty['ip'] = ip
  46. err_password1_empty['data'] = data['name']
  47. return JsonResponse(err_password1_empty)
  48. else:
  49. if str(data['password1']) == '':
  50. err_password1_empty = FBMsg.err_password1_empty()
  51. err_password1_empty['ip'] = ip
  52. err_password1_empty['data'] = data['name']
  53. return JsonResponse(err_password1_empty)
  54. else:
  55. if data.get('password2') is None:
  56. err_password2_empty = FBMsg.err_password2_empty()
  57. err_password2_empty['ip'] = ip
  58. err_password2_empty['data'] = data['name']
  59. return JsonResponse(err_password2_empty)
  60. else:
  61. if str(data['password2']) == '':
  62. err_password2_empty = FBMsg.err_password2_empty()
  63. err_password2_empty['ip'] = ip
  64. err_password2_empty['data'] = data['name']
  65. return JsonResponse(err_password2_empty)
  66. else:
  67. if str(data['password1']) != str(data['password2']):
  68. err_password_not_same = FBMsg.err_password_not_same()
  69. err_password_not_same['ip'] = ip
  70. err_password_not_same['data'] = data['name']
  71. return JsonResponse(err_password_not_same)
  72. else:
  73. transaction_code = Md5.md5(data['name'])
  74. user = User.objects.create_user(username=str(data['name']), password=str(data['password1']))
  75. Users.objects.create(user_id=user.id, name=str(data['name']),
  76. openid=transaction_code, appid=transaction_code,
  77. t_code=Md5.md5(str(timezone.now())),
  78. developer=1, ip=ip)
  79. auth.login(request, user)
  80. check_code = random.randint(1000, 9999)
  81. staff.objects.create(staff_name=str(data['name']),
  82. staff_type='查看员',
  83. check_code=check_code,
  84. openid=transaction_code,
  85. appid=transaction_code,
  86. is_look=1,)
  87. # 记录注册成功日志
  88. try:
  89. log_success_operation(
  90. request=request,
  91. operation_content=f"用户注册成功 - 用户名:{data['name']},用户ID:{user.id}",
  92. operation_level="new",
  93. operator=data.get('name'),
  94. module_name="用户注册",
  95. object_id=str(user.id)
  96. )
  97. except Exception:
  98. pass
  99. if Users.objects.filter(name='PDA1', developer=1, is_delete=0).exists():
  100. print("PDA1已存在")
  101. else:
  102. staff.objects.create(staff_name='PDA1',
  103. staff_type='Inbound',
  104. check_code="123456",
  105. openid="PDA1",
  106. appid="PDA1",
  107. is_look=1,)
  108. User.objects.create_user(username='PDA1',password=str(123456))
  109. Users.objects.create(user_id=user.id, name='PDA1',
  110. openid="PDA1", appid="PDA1",
  111. t_code=Md5.md5(str(timezone.now())),
  112. developer=1, ip=ip)
  113. if Users.objects.filter(name='PDA2', developer=1, is_delete=0).exists():
  114. print("PDA2已存在")
  115. else:
  116. staff.objects.create(staff_name='PDA2',
  117. staff_type='Inbound',
  118. check_code="123456",
  119. openid="PDA2",
  120. appid="PDA2",
  121. is_look=1,)
  122. User.objects.create_user(username='PDA2',password=str(123456))
  123. Users.objects.create(user_id=user.id, name='PDA2',
  124. openid="PDA2", appid="PDA2",
  125. t_code=Md5.md5(str(timezone.now())),
  126. developer=1, ip=ip)
  127. user_id = staff.objects.filter(openid=transaction_code, staff_name=str(data['name']),
  128. staff_type='查看员', check_code=check_code).first().id
  129. folder = os.path.exists(os.path.join(settings.BASE_DIR, 'media/' + transaction_code))
  130. if not folder:
  131. os.makedirs(os.path.join(settings.BASE_DIR, 'media/' + transaction_code))
  132. os.makedirs(os.path.join(settings.BASE_DIR, 'media/' + transaction_code + "/win32"))
  133. os.makedirs(os.path.join(settings.BASE_DIR, 'media/' + transaction_code + "/linux"))
  134. os.makedirs(os.path.join(settings.BASE_DIR, 'media/' + transaction_code + "/darwin"))
  135. ret = FBMsg.ret()
  136. ret['ip'] = ip
  137. data['openid'] = transaction_code
  138. data['appid'] = transaction_code
  139. data['name'] = str(data['name'])
  140. data['staff_type'] = 'Admin'
  141. data['user_id'] = user_id
  142. data.pop('password1', '')
  143. data.pop('password2', '')
  144. ret['data'] = data
  145. # 注意:上面的注册成功日志已经在创建用户后记录,这里不需要重复记录
  146. return JsonResponse(ret)