def core_post(users_file, node_uid): ''' creat or update users ''' cli = CLI() reader = csv.DictReader(io.StringIO(users_file.read().decode('utf-8'))) res = [] users = [] for index, row in enumerate(reader): username = row.get('username') user = User.valid_objects.filter(username=username).first() try: if user: cli.update_user(user, row) else: user = cli.create_user(row) except ValidationError as exc: raise ValidationError({index + 1: exc.detail}) users.append(user) # 重复导入的后果可以接受,故不处理 res.append(UserCSVSerializer(user).data) if node_uid: node, node_subject = TreeNode.retrieve_node(node_uid) if node_subject == 'dept': cli.add_users_to_dept(users, node) elif node_subject == 'group': cli.add_users_to_group(users, node) else: raise ValueError return res
def create(self, validated_data): ''' 创建用户 ''' cli = CLI() password = validated_data.pop('password') user = cli.create_user(validated_data) user.from_register = True user.save() cli.set_user_password(user, password) return user
def create(self, request, *args, **kwargs): # pylint: disable=unused-argument ''' create user [POST] ''' data = request.data user_info = data.get('user', '') group_uids = [] dept_uids = [] node_uids = data.get('node_uids', []) if node_uids: for node_uid in node_uids: if node_uid.startswith(Dept.NODE_PREFIX): dept_uids.append(node_uid.replace(Dept.NODE_PREFIX, '', 1)) elif node_uid.startswith(Group.NODE_PREFIX): group_uids.append(node_uid.replace( Group.NODE_PREFIX, '', )) else: group_uids = data.get('group_uids', []) dept_uids = data.get('dept_uids', []) cli = CLI() password = user_info.pop('password', None) # 创建用户 user = cli.create_user(user_info) if password: validate_password(password) cli.set_user_password(user, password) user.origin = 1 # 管理员添加 user.save() # 分配组和部门 self.assign_user(user, dept_uids=dept_uids, group_uids=group_uids) user_serializer = EmployeeSerializer(user) transaction.on_commit(lambda: WebhookManager.user_created(user)) return Response( user_serializer.data, status=status.HTTP_201_CREATED, headers=self.get_success_headers(user_serializer.data), )