generate_init_json.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import json
  2. import logging
  3. import os
  4. import django
  5. from django.db.models import QuerySet
  6. from dvadmin.system.views.system_config import SystemConfigInitSerializer
  7. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'application.settings')
  8. django.setup()
  9. from django.core.management.base import BaseCommand
  10. from application.settings import BASE_DIR
  11. from dvadmin.system.models import Menu, Users, Dept, Role, ApiWhiteList, Dictionary, SystemConfig
  12. from dvadmin.system.views.api_white_list import ApiWhiteListInitSerializer
  13. from dvadmin.system.views.dept import DeptInitSerializer
  14. from dvadmin.system.views.dictionary import DictionaryInitSerializer
  15. from dvadmin.system.views.menu import MenuInitSerializer
  16. from dvadmin.system.views.role import RoleInitSerializer
  17. from dvadmin.system.views.user import UsersInitSerializer
  18. logger = logging.getLogger(__name__)
  19. class Command(BaseCommand):
  20. """
  21. 生产初始化菜单: python3 manage.py generate_init_json 生成初始化的model名
  22. 例如:
  23. 全部生成:python3 manage.py generate_init_json
  24. 只生成某个model的: python3 manage.py generate_init_json users
  25. """
  26. def serializer_data(self, serializer, query_set: QuerySet):
  27. serializer = serializer(query_set, many=True)
  28. data = json.loads(json.dumps(serializer.data, ensure_ascii=False))
  29. with open(os.path.join(BASE_DIR, f'init_{query_set.model._meta.model_name}.json'), 'w',encoding="utf-8") as f:
  30. json.dump(data, f, indent=4, ensure_ascii=False)
  31. return
  32. def add_arguments(self, parser):
  33. parser.add_argument("generate_name", nargs="*", type=str, help="初始化生成的表名")
  34. def generate_users(self):
  35. self.serializer_data(UsersInitSerializer, Users.objects.all())
  36. def generate_role(self):
  37. self.serializer_data(RoleInitSerializer, Role.objects.all())
  38. def generate_dept(self):
  39. self.serializer_data(DeptInitSerializer, Dept.objects.filter(parent_id__isnull=True))
  40. def generate_menu(self):
  41. self.serializer_data(MenuInitSerializer, Menu.objects.filter(parent_id__isnull=True))
  42. def generate_api_white_list(self):
  43. self.serializer_data(ApiWhiteListInitSerializer, ApiWhiteList.objects.all())
  44. def generate_dictionary(self):
  45. self.serializer_data(DictionaryInitSerializer, Dictionary.objects.filter(parent_id__isnull=True))
  46. def generate_system_config(self):
  47. self.serializer_data(SystemConfigInitSerializer, SystemConfig.objects.filter(parent_id__isnull=True))
  48. def handle(self, *args, **options):
  49. generate_name = options.get('generate_name')
  50. generate_name_dict = {
  51. "users": self.generate_users,
  52. "role": self.generate_role,
  53. "dept": self.generate_dept,
  54. "menu": self.generate_menu,
  55. "api_white_list": self.generate_api_white_list,
  56. "dictionary": self.generate_dictionary,
  57. "system_config": self.generate_system_config,
  58. }
  59. if not generate_name:
  60. for ele in generate_name_dict.keys():
  61. generate_name_dict[ele]()
  62. return
  63. for generate_name in generate_name:
  64. if generate_name not in generate_name_dict:
  65. print(f"该初始化方法尚未配置\n{generate_name_dict}")
  66. raise Exception(f"该初始化方法尚未配置,已配置项:{list(generate_name_dict.keys())}")
  67. generate_name_dict[generate_name]()
  68. return
  69. if __name__ == '__main__':
  70. # with open(os.path.join(BASE_DIR, 'temp_init_menu.json')) as f:
  71. # for menu_data in json.load(f):
  72. # menu_data['creator'] = 1
  73. # menu_data['modifier'] = 1
  74. # menu_data['dept_belong_id'] = 1
  75. # request.user = Users.objects.order_by('create_datetime').first()
  76. # serializer = MenuInitSerializer(data=menu_data, request=request)
  77. # serializer.is_valid(raise_exception=True)
  78. # serializer.save()
  79. a = Users.objects.filter()
  80. print(type(Users.objects.filter()))