mirror of https://github.com/openspug/spug
A 添加manage.py user命令实现创建/启用/重置账户功能
parent
b7c33ea803
commit
a63a8191b0
|
@ -0,0 +1,71 @@
|
||||||
|
# Copyright: (c) OpenSpug Organization. https://github.com/openspug/spug
|
||||||
|
# Copyright: (c) <spug.dev@gmail.com>
|
||||||
|
# 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()
|
|
@ -15,6 +15,8 @@ class Command(BaseCommand):
|
||||||
parser.add_argument('-s', default=False, action='store_true', help='是否是超级用户(默认否)')
|
parser.add_argument('-s', default=False, action='store_true', help='是否是超级用户(默认否)')
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
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(
|
User.objects.create(
|
||||||
username=options['u'],
|
username=options['u'],
|
||||||
nickname=options['n'],
|
nickname=options['n'],
|
||||||
|
@ -22,3 +24,4 @@ class Command(BaseCommand):
|
||||||
is_supper=options['s'],
|
is_supper=options['s'],
|
||||||
)
|
)
|
||||||
self.stdout.write(self.style.SUCCESS('创建成功'))
|
self.stdout.write(self.style.SUCCESS('创建成功'))
|
||||||
|
self.stdout.write(self.style.WARNING('废弃警告,v2.3.0之后将会移除该命令,请使用 python manage.py user add 来代替!'))
|
||||||
|
|
Loading…
Reference in New Issue