refactor(initialize data): bug fixed & refactor initialize script
parent
0ca351c7ba
commit
c89148f681
File diff suppressed because it is too large
Load Diff
|
@ -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
|
@ -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()
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 提交表单
|
||||
|
|
Loading…
Reference in New Issue