From a63a8191b083ba67139cf3015869fedc3a9457b5 Mon Sep 17 00:00:00 2001 From: vapao Date: Fri, 15 May 2020 19:27:18 +0800 Subject: [PATCH] =?UTF-8?q?A=20=E6=B7=BB=E5=8A=A0manage.py=20user=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E5=AE=9E=E7=8E=B0=E5=88=9B=E5=BB=BA/=E5=90=AF?= =?UTF-8?q?=E7=94=A8/=E9=87=8D=E7=BD=AE=E8=B4=A6=E6=88=B7=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apps/account/management/commands/user.py | 71 +++++++++++++++++++ .../account/management/commands/useradd.py | 3 + 2 files changed, 74 insertions(+) create mode 100644 spug_api/apps/account/management/commands/user.py diff --git a/spug_api/apps/account/management/commands/user.py b/spug_api/apps/account/management/commands/user.py new file mode 100644 index 0000000..7ef7c5a --- /dev/null +++ b/spug_api/apps/account/management/commands/user.py @@ -0,0 +1,71 @@ +# Copyright: (c) OpenSpug Organization. https://github.com/openspug/spug +# Copyright: (c) +# Released under the MIT License. +from django.core.management.base import BaseCommand +from apps.account.models import User + + +class Command(BaseCommand): + help = '账户管理' + + def add_arguments(self, parser): + parser.add_argument('action', type=str, help='执行动作') + parser.add_argument('-u', required=False, help='账户名称') + parser.add_argument('-p', required=False, help='账户密码') + parser.add_argument('-n', required=False, help='账户昵称') + parser.add_argument('-s', default=False, help='是否是超级用户(默认否)') + + def echo_success(self, msg): + self.stdout.write(self.style.SUCCESS(msg)) + + def echo_error(self, msg): + self.stderr.write(self.style.ERROR(msg)) + + def print_help(self, *args): + message = ''' + 账户管理命令用法: + user add 创建账户,例如:user add -u admin -p 123 -n 管理员 -s + user reset 重置账户密码,例如:user reset -u admin -p 123 + user enable 启用被禁用的账户,例如:user enable -u admin + ''' + self.stdout.write(message) + + def handle(self, *args, **options): + action = options['action'] + if action == 'add': + if not all((options['u'], options['p'], options['n'])): + self.echo_error('缺少参数') + self.print_help() + elif User.objects.filter(username=options['u'], deleted_by_id__isnull=True).exists(): + self.echo_error(f'已存在登录名为【{options["u"]}】的用户') + else: + User.objects.create( + username=options['u'], + nickname=options['n'], + password_hash=User.make_password(options['p']), + is_supper=options['s'], + ) + self.echo_success('创建用户成功') + elif action == 'enable': + if not options['u']: + self.echo_error('缺少参数') + self.print_help() + user = User.objects.filter(username=options['u'], deleted_by_id__isnull=True).first() + if not user: + return self.echo_error(f'未找到登录名为【{options["u"]}】的账户') + user.is_active = True + user.save() + self.echo_success('账户已启用') + elif action == 'reset': + if not all((options['u'], options['p'])): + self.echo_error('缺少参数') + self.print_help() + user = User.objects.filter(username=options['u'], deleted_by_id__isnull=True).first() + if not user: + return self.echo_error(f'未找到登录名为【{options["u"]}】的账户') + user.password_hash = User.make_password(options['p']) + user.save() + self.echo_success('账户密码已重置') + else: + self.echo_error('未识别的操作') + self.print_help() diff --git a/spug_api/apps/account/management/commands/useradd.py b/spug_api/apps/account/management/commands/useradd.py index 4ad540f..17f2c52 100644 --- a/spug_api/apps/account/management/commands/useradd.py +++ b/spug_api/apps/account/management/commands/useradd.py @@ -15,6 +15,8 @@ class Command(BaseCommand): parser.add_argument('-s', default=False, action='store_true', help='是否是超级用户(默认否)') def handle(self, *args, **options): + if User.objects.filter(username=options['u'], deleted_by_id__isnull=True).exists(): + return self.stderr.write(self.style.ERROR(f'已存在登录名为【{options["u"]}】的用户')) User.objects.create( username=options['u'], nickname=options['n'], @@ -22,3 +24,4 @@ class Command(BaseCommand): is_supper=options['s'], ) self.stdout.write(self.style.SUCCESS('创建成功')) + self.stdout.write(self.style.WARNING('废弃警告,v2.3.0之后将会移除该命令,请使用 python manage.py user add 来代替!'))