98 lines
3.1 KiB
Python
98 lines
3.1 KiB
Python
from rest_framework.generics import CreateAPIView
|
|
from rest_framework.response import Response
|
|
from rest_framework import status
|
|
from rest_framework.exceptions import ParseError
|
|
from apps.auth1.serializers import RegisterSerializer
|
|
from apps.system.models import User
|
|
from django.db import transaction
|
|
|
|
|
|
class RegisterView(CreateAPIView):
|
|
"""用户注册
|
|
|
|
用户注册,创建用户和企业信息
|
|
"""
|
|
authentication_classes = []
|
|
permission_classes = []
|
|
serializer_class = RegisterSerializer
|
|
|
|
@transaction.atomic
|
|
def create(self, request, *args, **kwargs):
|
|
from apps.carbon.models import Enterprise
|
|
import re
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
vdata = serializer.validated_data
|
|
|
|
email = vdata.get('email')
|
|
code = vdata.get('code')
|
|
nickname = vdata.get('nickname')
|
|
password = vdata.get('password')
|
|
enterprise_name = vdata.get('enterprise_name')
|
|
credit_code = vdata.get('credit_code')
|
|
|
|
# 验证邮箱验证码
|
|
from django.core.cache import cache
|
|
cache_key = f'email_code_{email}'
|
|
cached_code = cache.get(cache_key)
|
|
if not cached_code or cached_code != code:
|
|
raise ParseError('验证码错误或已过期')
|
|
|
|
# 验证统一社会信用代码格式
|
|
credit_code_pattern = r'^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$'
|
|
if not re.match(credit_code_pattern, credit_code):
|
|
raise ParseError('统一社会信用代码格式不正确')
|
|
|
|
# 检查邮箱是否已存在
|
|
if User.objects.filter(username=email).exists():
|
|
raise ParseError('该邮箱已注册')
|
|
|
|
# 检查统一社会信用代码是否已存在
|
|
if Enterprise.objects.filter(credit_code=credit_code).exists():
|
|
raise ParseError('该统一社会信用代码已注册')
|
|
|
|
# 创建企业部门
|
|
from apps.system.models import Dept
|
|
# 获取根组织部门
|
|
parent_dept = Dept.objects.get(name='根组织')
|
|
dept = Dept.objects.create(
|
|
name=enterprise_name,
|
|
type='enterprise',
|
|
parent=parent_dept
|
|
)
|
|
|
|
# 创建企业信息
|
|
enterprise = Enterprise.objects.create(
|
|
name=enterprise_name,
|
|
credit_code=credit_code,
|
|
belong_dept=dept
|
|
)
|
|
|
|
# 创建用户
|
|
user = User.objects.create_user(
|
|
username=email,
|
|
password=password,
|
|
type='enterprise',
|
|
name=nickname
|
|
)
|
|
|
|
# 授予权限
|
|
from apps.system.models import UserPost, Post
|
|
post = Post.objects.get(name='核算员')
|
|
UserPost.objects.create(
|
|
user = user,
|
|
post = post,
|
|
dept = dept,
|
|
sort = 1
|
|
)
|
|
user.belong_dept = dept
|
|
user.post = post
|
|
user.save(update_fields=['belong_dept', 'post'])
|
|
|
|
return Response({
|
|
'message': '注册成功',
|
|
'user_id': user.id,
|
|
'enterprise_id': enterprise.id
|
|
}, status=status.HTTP_201_CREATED)
|