refactor(initialize data): bug fixed & refactor initialize script

pull/52/head
Angelo 2022-04-25 12:11:39 +08:00
parent 0ca351c7ba
commit c89148f681
7 changed files with 1540 additions and 1478 deletions

File diff suppressed because it is too large Load Diff

View File

@ -13,27 +13,33 @@ class Command(BaseCommand):
""" """
def add_arguments(self, parser): def add_arguments(self, parser):
parser.add_argument('init_name', nargs='*', type=str, ) parser.add_argument(
parser.add_argument('-y', nargs='*') "init_name",
parser.add_argument('-Y', nargs='*') nargs="*",
parser.add_argument('-n', nargs='*') type=str,
parser.add_argument('-N', nargs='*') )
parser.add_argument("-y", nargs="*")
parser.add_argument("-Y", nargs="*")
parser.add_argument("-n", nargs="*")
parser.add_argument("-N", nargs="*")
def handle(self, *args, **options): def handle(self, *args, **options):
reset = False reset = False
if isinstance(options.get('y'), list) or isinstance(options.get('Y'), list): if isinstance(options.get("y"), list) or isinstance(options.get("Y"), list):
reset = True reset = True
if isinstance(options.get('n'), list) or isinstance(options.get('N'), list): if isinstance(options.get("n"), list) or isinstance(options.get("N"), list):
reset = False reset = False
print(f"正在准备初始化数据,{'如有初始化数据,将会不做操作跳过' if not reset else '初始数据将会先删除后新增'}...") print(f"正在准备初始化数据,{'如有初始化数据,将会不做操作跳过' if not reset else '初始数据将会先删除后新增'}...")
for app in settings.INSTALLED_APPS: for app in settings.INSTALLED_APPS:
try: try:
exec(f""" exec(
from {app}.initialize import main f"""
from {app}.util.initialize import main
main(reset={reset}) main(reset={reset})
""") """
)
except ModuleNotFoundError: except ModuleNotFoundError:
pass pass
print("初始化数据完成!") print("初始化数据完成!")

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,91 @@
# 初始化
import os
import django
from dvadmin.utils.core_initialize import CoreInitialize
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "application.settings")
django.setup()
from dvadmin.system.models import (
Dept,
Button,
Menu,
MenuButton,
Role,
Users,
Dictionary,
)
from .init_data import (
dept_data,
button_data,
menu_data,
menu_button_data,
role_data,
staff_data,
)
class Initialize(CoreInitialize):
creator_id = 1
def init_dept(self):
"""
初始化部门信息
"""
self.dept_data = dept_data
self.save(Dept, self.dept_data, "部门信息")
def init_button(self):
"""
初始化按钮表
"""
self.button_data = button_data
self.save(Button, self.button_data, "权限表标识")
def init_menu(self):
"""
初始化菜单表
"""
self.menu_data = menu_data
self.save(Menu, self.menu_data, "菜单表")
def init_menu_button(self):
"""
初始化菜单按钮表
"""
self.menu_button_data = menu_button_data
self.save(MenuButton, self.menu_button_data, "菜单权限表")
def init_role(self):
"""
初始化角色表
"""
data = role_data
self.save(Role, data, "角色表")
def init_users(self):
"""
初始化用户表
"""
data = staff_data
self.save(Users, data, "用户表", no_reset=False)
def run(self):
self.init_dept()
self.init_button()
self.init_menu()
self.init_menu_button()
self.init_role()
self.init_users()
# 项目init 初始化,默认会执行 main 方法进行初始化
def main(reset=False):
Initialize(reset).run()
if __name__ == "__main__":
main()

View File

@ -17,37 +17,46 @@ from dvadmin.system.models import Users
from django_restql.mixins import DynamicFieldsMixin from django_restql.mixins import DynamicFieldsMixin
class CustomModelSerializer(DynamicFieldsMixin, ModelSerializer):
class CustomModelSerializer(DynamicFieldsMixin,ModelSerializer):
""" """
增强DRF的ModelSerializer,可自动更新模型的审计字段记录 增强DRF的ModelSerializer,可自动更新模型的审计字段记录
(1)self.request能获取到rest_framework.request.Request对象 (1)self.request能获取到rest_framework.request.Request对象
""" """
# 修改人的审计字段名称, 默认modifier, 继承使用时可自定义覆盖 # 修改人的审计字段名称, 默认modifier, 继承使用时可自定义覆盖
modifier_field_id = 'modifier' modifier_field_id = "modifier"
modifier_name = serializers.SerializerMethodField(read_only=True) modifier_name = serializers.SerializerMethodField(read_only=True)
def get_modifier_name(self, instance): def get_modifier_name(self, instance):
if not hasattr(instance, 'modifier'): if not hasattr(instance, "modifier"):
return None return None
queryset = Users.objects.filter(username=instance.modifier).values_list('name', flat=True).first() queryset = (
Users.objects.filter(id=instance.modifier)
.values_list("name", flat=True)
.first()
)
if queryset: if queryset:
return queryset return queryset
return None return None
# 创建人的审计字段名称, 默认creator, 继承使用时可自定义覆盖 # 创建人的审计字段名称, 默认creator, 继承使用时可自定义覆盖
creator_field_id = 'creator' creator_field_id = "creator"
creator_name = serializers.SlugRelatedField(slug_field="name", source="creator", read_only=True) creator_name = serializers.SlugRelatedField(
slug_field="name", source="creator", read_only=True
)
# 数据所属部门字段 # 数据所属部门字段
dept_belong_id_field_name = 'dept_belong_id' dept_belong_id_field_name = "dept_belong_id"
# 添加默认时间返回格式 # 添加默认时间返回格式
create_datetime = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True) create_datetime = serializers.DateTimeField(
update_datetime = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False) format="%Y-%m-%d %H:%M:%S", required=False, read_only=True
)
update_datetime = serializers.DateTimeField(
format="%Y-%m-%d %H:%M:%S", required=False
)
def __init__(self, instance=None, data=empty, request=None, **kwargs): def __init__(self, instance=None, data=empty, request=None, **kwargs):
super().__init__(instance, data, **kwargs) super().__init__(instance, data, **kwargs)
self.request: Request = request or self.context.get('request', None) self.request: Request = request or self.context.get("request", None)
def save(self, **kwargs): def save(self, **kwargs):
return super().save(**kwargs) return super().save(**kwargs)
@ -60,30 +69,36 @@ class CustomModelSerializer(DynamicFieldsMixin,ModelSerializer):
if self.creator_field_id in self.fields.fields: if self.creator_field_id in self.fields.fields:
validated_data[self.creator_field_id] = self.request.user validated_data[self.creator_field_id] = self.request.user
if self.dept_belong_id_field_name in self.fields.fields and validated_data.get( if (
self.dept_belong_id_field_name, None) is None: self.dept_belong_id_field_name in self.fields.fields
validated_data[self.dept_belong_id_field_name] = getattr(self.request.user, 'dept_id', None) and validated_data.get(self.dept_belong_id_field_name, None) is None
):
validated_data[self.dept_belong_id_field_name] = getattr(
self.request.user, "dept_id", None
)
return super().create(validated_data) return super().create(validated_data)
def update(self, instance, validated_data): def update(self, instance, validated_data):
if self.request: if self.request:
if hasattr(self.instance, self.modifier_field_id): if hasattr(self.instance, self.modifier_field_id):
setattr(self.instance, self.modifier_field_id, self.get_request_user_id()) setattr(
self.instance, self.modifier_field_id, self.get_request_user_id()
)
return super().update(instance, validated_data) return super().update(instance, validated_data)
def get_request_username(self): def get_request_username(self):
if getattr(self.request, 'user', None): if getattr(self.request, "user", None):
return getattr(self.request.user, 'username', None) return getattr(self.request.user, "username", None)
return None return None
def get_request_name(self): def get_request_name(self):
if getattr(self.request, 'user', None): if getattr(self.request, "user", None):
return getattr(self.request.user, 'name', None) return getattr(self.request.user, "name", None)
return None return None
def get_request_user_id(self): def get_request_user_id(self):
if getattr(self.request, 'user', None): if getattr(self.request, "user", None):
return getattr(self.request.user, 'id', None) return getattr(self.request.user, "id", None)
return None return None
# @cached_property # @cached_property
@ -132,4 +147,3 @@ class CustomModelSerializer(DynamicFieldsMixin,ModelSerializer):
# fields.pop(field, None) # fields.pop(field, None)
# #
# return fields # return fields

View File

@ -3,8 +3,9 @@
v-if="show" v-if="show"
class="d2-source" class="d2-source"
:class="{ 'd2-source--active': isActive }" :class="{ 'd2-source--active': isActive }"
@click="handleClick"> @click="handleClick"
<d2-icon name="code"/> 本页源码 >
<d2-icon name="code" /> 本页源码
</div> </div>
</template> </template>
@ -51,11 +52,11 @@ export default {
$paddingLR: 15px; $paddingLR: 15px;
$paddingTB: 7px; $paddingTB: 7px;
$fontSize: 12px; $fontSize: 12px;
$rightOuter: $paddingLR / 2; $rightOuter: calc($paddingLR / 2);
opacity: 0; opacity: 0;
position: fixed; position: fixed;
z-index: 9999; z-index: 9999;
right: - $borderRadius - $rightOuter; right: -$borderRadius - $rightOuter;
bottom: 20px; bottom: 20px;
font-size: $fontSize; font-size: $fontSize;
line-height: $fontSize; line-height: $fontSize;
@ -63,17 +64,17 @@ export default {
border-radius: $borderRadius; border-radius: $borderRadius;
padding: $paddingTB $paddingLR; padding: $paddingTB $paddingLR;
padding-right: $borderRadius + $paddingLR; padding-right: $borderRadius + $paddingLR;
background-color: rgba(#000, .7); background-color: rgba(#000, 0.7);
border: 1px solid #000; border: 1px solid #000;
color: #FFF; color: #fff;
transition: all .3s; transition: all 0.3s;
@extend %unable-select; @extend %unable-select;
&.d2-source--active { &.d2-source--active {
opacity: 1; opacity: 1;
} }
&:hover { &:hover {
right: - $borderRadius; right: -$borderRadius;
background-color: rgba(#000, .9); background-color: rgba(#000, 0.9);
} }
} }
</style> </style>

View File

@ -86,14 +86,15 @@
<span>注册用户</span> <span>注册用户</span>
</p> --> </p> -->
<!-- quick login --> <!-- quick login -->
<!-- <el-button <el-button
class="page-login--quick" class="page-login--quick"
size="default" size="default"
type="info" type="info"
@click="dialogVisible = true" @click="dialogVisible = true"
v-if="$env === 'development'"
> >
快速选择用户测试功能 快速选择用户限dev环境
</el-button> --> </el-button>
</div> </div>
</div> </div>
<div class="page-login--content-footer"> <div class="page-login--content-footer">
@ -151,19 +152,14 @@ export default {
dialogVisible: false, dialogVisible: false,
users: [ users: [
{ {
name: 'Admin', name: '超管',
username: 'superadmin',
password: 'admin123456'
},
{
name: '管理员',
username: 'admin', username: 'admin',
password: 'admin' password: 'admin123456'
},
{
name: 'Editor',
username: 'editor',
password: 'editor'
},
{
name: 'User1',
username: 'user1',
password: 'user1'
} }
], ],
// //
@ -220,7 +216,8 @@ export default {
handleUserBtnClick (user) { handleUserBtnClick (user) {
this.formLogin.username = user.username this.formLogin.username = user.username
this.formLogin.password = user.password this.formLogin.password = user.password
this.submit() // this.submit()
this.dialogVisible = false
}, },
/** /**
* @description 提交表单 * @description 提交表单