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):
parser.add_argument('init_name', nargs='*', type=str, )
parser.add_argument('-y', nargs='*')
parser.add_argument('-Y', nargs='*')
parser.add_argument('-n', nargs='*')
parser.add_argument('-N', nargs='*')
parser.add_argument(
"init_name",
nargs="*",
type=str,
)
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):
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
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
print(f"正在准备初始化数据,{'如有初始化数据,将会不做操作跳过' if not reset else '初始数据将会先删除后新增'}...")
for app in settings.INSTALLED_APPS:
try:
exec(f"""
from {app}.initialize import main
exec(
f"""
from {app}.util.initialize import main
main(reset={reset})
""")
"""
)
except ModuleNotFoundError:
pass
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
class CustomModelSerializer(DynamicFieldsMixin,ModelSerializer):
class CustomModelSerializer(DynamicFieldsMixin, ModelSerializer):
"""
增强DRF的ModelSerializer,可自动更新模型的审计字段记录
(1)self.request能获取到rest_framework.request.Request对象
"""
# 修改人的审计字段名称, 默认modifier, 继承使用时可自定义覆盖
modifier_field_id = 'modifier'
modifier_field_id = "modifier"
modifier_name = serializers.SerializerMethodField(read_only=True)
def get_modifier_name(self, instance):
if not hasattr(instance, 'modifier'):
if not hasattr(instance, "modifier"):
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:
return queryset
return None
# 创建人的审计字段名称, 默认creator, 继承使用时可自定义覆盖
creator_field_id = 'creator'
creator_name = serializers.SlugRelatedField(slug_field="name", source="creator", read_only=True)
creator_field_id = "creator"
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)
update_datetime = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False)
create_datetime = serializers.DateTimeField(
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):
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):
return super().save(**kwargs)
@ -60,30 +69,36 @@ class CustomModelSerializer(DynamicFieldsMixin,ModelSerializer):
if self.creator_field_id in self.fields.fields:
validated_data[self.creator_field_id] = self.request.user
if self.dept_belong_id_field_name in self.fields.fields 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)
if (
self.dept_belong_id_field_name in self.fields.fields
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)
def update(self, instance, validated_data):
if self.request:
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)
def get_request_username(self):
if getattr(self.request, 'user', None):
return getattr(self.request.user, 'username', None)
if getattr(self.request, "user", None):
return getattr(self.request.user, "username", None)
return None
def get_request_name(self):
if getattr(self.request, 'user', None):
return getattr(self.request.user, 'name', None)
if getattr(self.request, "user", None):
return getattr(self.request.user, "name", None)
return None
def get_request_user_id(self):
if getattr(self.request, 'user', None):
return getattr(self.request.user, 'id', None)
if getattr(self.request, "user", None):
return getattr(self.request.user, "id", None)
return None
# @cached_property
@ -132,4 +147,3 @@ class CustomModelSerializer(DynamicFieldsMixin,ModelSerializer):
# fields.pop(field, None)
#
# return fields

View File

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

View File

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