From ab1d1c87e2131e311fc5f01421e979835721d551 Mon Sep 17 00:00:00 2001 From: raymond Date: Fri, 24 Mar 2023 16:41:22 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E9=80=9A=E8=BF=87pyt?= =?UTF-8?q?hon=20manage.py=20createsuperuser=E5=88=9B=E5=BB=BA=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dvadmin/system/models.py | 47 ++++++++++++++++++---------- backend/dvadmin/system/views/user.py | 5 +++ 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/backend/dvadmin/system/models.py b/backend/dvadmin/system/models.py index a33814f..4376afb 100644 --- a/backend/dvadmin/system/models.py +++ b/backend/dvadmin/system/models.py @@ -1,9 +1,9 @@ import hashlib import os -from django.contrib.auth.models import AbstractUser +from django.contrib.auth.models import AbstractUser, UserManager from django.db import models - +from django.core.exceptions import ObjectDoesNotExist, ValidationError from application import dispatch from dvadmin.utils.models import CoreModel, table_prefix @@ -13,6 +13,34 @@ STATUS_CHOICES = ( ) +class Role(CoreModel): + name = models.CharField(max_length=64, verbose_name="角色名称", help_text="角色名称") + key = models.CharField(max_length=64, unique=True, verbose_name="权限字符", help_text="权限字符") + sort = models.IntegerField(default=1, verbose_name="角色顺序", help_text="角色顺序") + status = models.BooleanField(default=True, verbose_name="角色状态", help_text="角色状态") + admin = models.BooleanField(default=False, verbose_name="是否为admin", help_text="是否为admin") + + class Meta: + db_table = table_prefix + "system_role" + verbose_name = "角色表" + verbose_name_plural = verbose_name + ordering = ("sort",) + + +class CustomUserManager(UserManager): + + def create_superuser(self, username, email=None, password=None, **extra_fields): + user = super(CustomUserManager, self).create_superuser(username, email, password, **extra_fields) + user.set_password(password) + try: + user.role.add(Role.objects.get(name="管理员")) + user.save(using=self._db) + return user + except ObjectDoesNotExist: + user.delete() + raise ValidationError("角色`管理员`不存在, 创建失败, 请先执行python manage.py init") + + class Users(CoreModel, AbstractUser): username = models.CharField(max_length=150, unique=True, db_index=True, verbose_name="用户账号", help_text="用户账号") @@ -48,6 +76,7 @@ class Users(CoreModel, AbstractUser): blank=True, help_text="关联部门", ) + objects = CustomUserManager() def set_password(self, raw_password): super().set_password(hashlib.md5(raw_password.encode(encoding="UTF-8")).hexdigest()) @@ -76,20 +105,6 @@ class Post(CoreModel): ordering = ("sort",) -class Role(CoreModel): - name = models.CharField(max_length=64, verbose_name="角色名称", help_text="角色名称") - key = models.CharField(max_length=64, unique=True, verbose_name="权限字符", help_text="权限字符") - sort = models.IntegerField(default=1, verbose_name="角色顺序", help_text="角色顺序") - status = models.BooleanField(default=True, verbose_name="角色状态", help_text="角色状态") - admin = models.BooleanField(default=False, verbose_name="是否为admin", help_text="是否为admin") - - class Meta: - db_table = table_prefix + "system_role" - verbose_name = "角色表" - verbose_name_plural = verbose_name - ordering = ("sort",) - - class Dept(CoreModel): name = models.CharField(max_length=64, verbose_name="部门名称", help_text="部门名称") key = models.CharField(max_length=64, unique=True, null=True, blank=True, verbose_name="关联字符", diff --git a/backend/dvadmin/system/views/user.py b/backend/dvadmin/system/views/user.py index 4355f34..01fae1b 100644 --- a/backend/dvadmin/system/views/user.py +++ b/backend/dvadmin/system/views/user.py @@ -293,6 +293,11 @@ class UserViewSet(CustomModelViewSet): 'dept_id': dept.id, 'dept_name': dept.name } + else: + result['dept_info'] = { + 'dept_id': None, + 'dept_name': "暂无部门" + } role = getattr(user, 'role', None) if role: result['role_info'] = role.values('id', 'name', 'key')