from django.http import JsonResponse from userprofile.models import Users from utils.fbmsg import FBMsg from utils.md5 import Md5 from django.views.decorators.csrf import csrf_exempt from django.utils.decorators import method_decorator from django.contrib import auth from django.utils import timezone from django.contrib.auth.models import User from staff.models import ListModel as staff import json, random, os from django.conf import settings from operation_log.views import log_success_operation, log_failure_operation @method_decorator(csrf_exempt, name='dispatch') # 免除视图类的dispatch方法的CSRF验证 def register(request, *args, **kwargs): post_data = json.loads(request.body.decode()) data = { "name": post_data.get('name'), "password1": post_data.get('password1'), "password2": post_data.get('password2') } ip = request.META.get('HTTP_X_FORWARDED_FOR') if request.META.get( 'HTTP_X_FORWARDED_FOR') else request.META.get('REMOTE_ADDR') # 检查是否存在开发者用户且未被删除 if Users.objects.filter(name=str(data['name']), developer=1, is_delete=0).exists(): # 记录注册失败日志(用户名已存在) try: log_failure_operation( request=request, operation_content=f"用户注册失败:用户名已存在 - 用户名:{data['name']}", operation_level="login", operator=data.get('name'), module_name="用户注册" ) except Exception: pass err_user_same = FBMsg.err_user_same() err_user_same['ip'] = ip err_user_same['data'] = data['name'] return JsonResponse(err_user_same) else: if data.get('password1') is None: err_password1_empty = FBMsg.err_password1_empty() err_password1_empty['ip'] = ip err_password1_empty['data'] = data['name'] return JsonResponse(err_password1_empty) else: if str(data['password1']) == '': err_password1_empty = FBMsg.err_password1_empty() err_password1_empty['ip'] = ip err_password1_empty['data'] = data['name'] return JsonResponse(err_password1_empty) else: if data.get('password2') is None: err_password2_empty = FBMsg.err_password2_empty() err_password2_empty['ip'] = ip err_password2_empty['data'] = data['name'] return JsonResponse(err_password2_empty) else: if str(data['password2']) == '': err_password2_empty = FBMsg.err_password2_empty() err_password2_empty['ip'] = ip err_password2_empty['data'] = data['name'] return JsonResponse(err_password2_empty) else: if str(data['password1']) != str(data['password2']): err_password_not_same = FBMsg.err_password_not_same() err_password_not_same['ip'] = ip err_password_not_same['data'] = data['name'] return JsonResponse(err_password_not_same) else: transaction_code = Md5.md5(data['name']) user = User.objects.create_user(username=str(data['name']), password=str(data['password1'])) Users.objects.create(user_id=user.id, name=str(data['name']), openid=transaction_code, appid=transaction_code, t_code=Md5.md5(str(timezone.now())), developer=1, ip=ip) auth.login(request, user) check_code = random.randint(1000, 9999) staff.objects.create(staff_name=str(data['name']), staff_type='查看员', check_code=check_code, openid=transaction_code, appid=transaction_code, is_look=1,) # 记录注册成功日志 try: log_success_operation( request=request, operation_content=f"用户注册成功 - 用户名:{data['name']},用户ID:{user.id}", operation_level="new", operator=data.get('name'), module_name="用户注册", object_id=str(user.id) ) except Exception: pass if Users.objects.filter(name='PDA1', developer=1, is_delete=0).exists(): print("PDA1已存在") else: staff.objects.create(staff_name='PDA1', staff_type='Inbound', check_code="123456", openid="PDA1", appid="PDA1", is_look=1,) User.objects.create_user(username='PDA1',password=str(123456)) Users.objects.create(user_id=user.id, name='PDA1', openid="PDA1", appid="PDA1", t_code=Md5.md5(str(timezone.now())), developer=1, ip=ip) if Users.objects.filter(name='PDA2', developer=1, is_delete=0).exists(): print("PDA2已存在") else: staff.objects.create(staff_name='PDA2', staff_type='Inbound', check_code="123456", openid="PDA2", appid="PDA2", is_look=1,) User.objects.create_user(username='PDA2',password=str(123456)) Users.objects.create(user_id=user.id, name='PDA2', openid="PDA2", appid="PDA2", t_code=Md5.md5(str(timezone.now())), developer=1, ip=ip) user_id = staff.objects.filter(openid=transaction_code, staff_name=str(data['name']), staff_type='查看员', check_code=check_code).first().id folder = os.path.exists(os.path.join(settings.BASE_DIR, 'media/' + transaction_code)) if not folder: os.makedirs(os.path.join(settings.BASE_DIR, 'media/' + transaction_code)) os.makedirs(os.path.join(settings.BASE_DIR, 'media/' + transaction_code + "/win32")) os.makedirs(os.path.join(settings.BASE_DIR, 'media/' + transaction_code + "/linux")) os.makedirs(os.path.join(settings.BASE_DIR, 'media/' + transaction_code + "/darwin")) ret = FBMsg.ret() ret['ip'] = ip data['openid'] = transaction_code data['appid'] = transaction_code data['name'] = str(data['name']) data['staff_type'] = 'Admin' data['user_id'] = user_id data.pop('password1', '') data.pop('password2', '') ret['data'] = data # 注意:上面的注册成功日志已经在创建用户后记录,这里不需要重复记录 return JsonResponse(ret)