From 5ce22a5a9098e6f4601c6972814848901e13a311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Tue, 11 May 2021 00:21:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=8A=9F=E8=83=BD(=E4=B8=80=E9=94=AE?= =?UTF-8?q?=E5=88=9B=E5=BB=BAapp=E5=91=BD=E4=BB=A4):=20=E4=B8=80=E9=94=AE?= =?UTF-8?q?=E5=88=9B=E5=BB=BAapp=EF=BC=8C=E5=B9=B6=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E5=88=B0settings=E5=92=8Curls=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 创建命令: python manage.py createapp app名 python manage.py createapp app01 app02 ... --- .../apps/vadmin/op_drf/management/__init__.py | 0 .../op_drf/management/commands/__init__.py | 0 .../op_drf/management/commands/createapp.py | 75 +++++++++++++++++++ .../permission/management/commands/init.py | 2 +- dvadmin-backend/apps/vadmin/template/urls.py | 1 + 5 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 dvadmin-backend/apps/vadmin/op_drf/management/__init__.py create mode 100644 dvadmin-backend/apps/vadmin/op_drf/management/commands/__init__.py create mode 100644 dvadmin-backend/apps/vadmin/op_drf/management/commands/createapp.py diff --git a/dvadmin-backend/apps/vadmin/op_drf/management/__init__.py b/dvadmin-backend/apps/vadmin/op_drf/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dvadmin-backend/apps/vadmin/op_drf/management/commands/__init__.py b/dvadmin-backend/apps/vadmin/op_drf/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dvadmin-backend/apps/vadmin/op_drf/management/commands/createapp.py b/dvadmin-backend/apps/vadmin/op_drf/management/commands/createapp.py new file mode 100644 index 0000000..644b59f --- /dev/null +++ b/dvadmin-backend/apps/vadmin/op_drf/management/commands/createapp.py @@ -0,0 +1,75 @@ +import logging +import os +import shutil + +from django.core.management.base import BaseCommand + +logger = logging.getLogger(__name__) +from application.settings import BASE_DIR + + +class Command(BaseCommand): + """ + 创建App命令: + python manage.py createapp app名 + python manage.py createapp app01 app02 ... + """ + + def add_arguments(self, parser): + parser.add_argument('app_name', nargs='*', type=str, ) + + def handle(self, *args, **options): + app_name = options.get('app_name') + for name in app_name: + app_path = os.path.join(BASE_DIR, "apps", name) + # 判断app是否存在 + if os.path.exists(app_path): + print(f"创建失败,App {name} 已存在!") + break + source_path = os.path.join(BASE_DIR, "apps", "vadmin", "template") + target_path = app_path + if not os.path.exists(target_path): + # 如果目标路径不存在原文件夹的话就创建 + os.makedirs(target_path) + if os.path.exists(source_path): + # 如果目标路径存在原文件夹的话就先删除 + shutil.rmtree(target_path) + shutil.copytree(source_path, target_path) + # 修改app中的apps 内容 + content = f"""from django.apps import AppConfig + + +class {name.capitalize()}Config(AppConfig): + name = '{name}' + verbose_name = "{name}App" +""" + with open(os.path.join(app_path, "apps.py"), 'w', encoding='UTF-8') as f: + f.write(content) + f.close() + # 注册app到 settings.py 中 + injection(os.path.join(BASE_DIR, "application", "settings.py"), f" 'apps.{name}',\n", "INSTALLED_APPS", + "]") + + # 注册app到 urls.py 中 + injection(os.path.join(BASE_DIR, "application", "urls.py"), + f" re_path(r'^{name}/', include('apps.{name}.urls')),\n", "urlpatterns = [", + "]") + + print(f"创建 {name} App成功") + + +def injection(file_path, insert_content, startswith, endswith): + with open(file_path, "r+", encoding="utf-8") as f: + data = f.readlines() + with open(file_path, 'w', encoding='UTF-8') as f1: + is_INSTALLED_APPS = False + is_insert = False + for content in data: + # 判断文件是否 INSTALLED_APPS 开头 + if not is_insert and content.startswith(startswith): + is_INSTALLED_APPS = True + if not is_insert and content.startswith(endswith) and is_INSTALLED_APPS: + # 给前一行插入数据 + content = insert_content + content + is_insert = True + f1.writelines(content) diff --git a/dvadmin-backend/apps/vadmin/permission/management/commands/init.py b/dvadmin-backend/apps/vadmin/permission/management/commands/init.py index 3db4d21..ec4a3dc 100644 --- a/dvadmin-backend/apps/vadmin/permission/management/commands/init.py +++ b/dvadmin-backend/apps/vadmin/permission/management/commands/init.py @@ -12,7 +12,7 @@ logger = logging.getLogger(__name__) class Command(BaseCommand): """ - 项目初始化命令: python manage.py initialization + 项目初始化命令: python manage.py init """ def customSql(self, sql_list, model_name, table_name, is_yes): diff --git a/dvadmin-backend/apps/vadmin/template/urls.py b/dvadmin-backend/apps/vadmin/template/urls.py index e69de29..637600f 100644 --- a/dvadmin-backend/apps/vadmin/template/urls.py +++ b/dvadmin-backend/apps/vadmin/template/urls.py @@ -0,0 +1 @@ +urlpatterns = []