user.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # Copyright: (c) OpenSpug Organization. https://github.com/openspug/spug
  2. # Copyright: (c) <spug.dev@gmail.com>
  3. # Released under the AGPL-3.0 License.
  4. from django.core.management.base import BaseCommand
  5. from django.core.cache import cache
  6. from apps.account.models import User
  7. class Command(BaseCommand):
  8. help = '账户管理'
  9. def add_arguments(self, parser):
  10. parser.add_argument('action', type=str, help='执行动作')
  11. parser.add_argument('-u', required=False, help='账户名称')
  12. parser.add_argument('-p', required=False, help='账户密码')
  13. parser.add_argument('-n', required=False, help='账户昵称')
  14. parser.add_argument('-s', default=False, action='store_true', help='是否是超级用户(默认否)')
  15. def echo_success(self, msg):
  16. self.stdout.write(self.style.SUCCESS(msg))
  17. def echo_error(self, msg):
  18. self.stderr.write(self.style.ERROR(msg))
  19. def print_help(self, *args):
  20. message = '''
  21. 账户管理命令用法:
  22. user add 创建账户,例如:user add -u admin -p 123 -n 管理员 -s
  23. user reset 重置账户密码,例如:user reset -u admin -p 123
  24. user enable 启用被禁用的账户,例如:user enable -u admin
  25. '''
  26. self.stdout.write(message)
  27. def handle(self, *args, **options):
  28. action = options['action']
  29. if action == 'add':
  30. if not all((options['u'], options['p'], options['n'])):
  31. self.echo_error('缺少参数')
  32. self.print_help()
  33. elif User.objects.filter(username=options['u'], deleted_by_id__isnull=True).exists():
  34. self.echo_error(f'已存在登录名为【{options["u"]}】的用户')
  35. else:
  36. User.objects.create(
  37. username=options['u'],
  38. nickname=options['n'],
  39. password_hash=User.make_password(options['p']),
  40. is_supper=options['s'],
  41. )
  42. self.echo_success('创建用户成功')
  43. elif action == 'enable':
  44. if not options['u']:
  45. self.echo_error('缺少参数')
  46. self.print_help()
  47. user = User.objects.filter(username=options['u'], deleted_by_id__isnull=True).first()
  48. if not user:
  49. return self.echo_error(f'未找到登录名为【{options["u"]}】的账户')
  50. user.is_active = True
  51. user.save()
  52. cache.delete(user.username)
  53. self.echo_success('账户已启用')
  54. elif action == 'reset':
  55. if not all((options['u'], options['p'])):
  56. self.echo_error('缺少参数')
  57. self.print_help()
  58. user = User.objects.filter(username=options['u'], deleted_by_id__isnull=True).first()
  59. if not user:
  60. return self.echo_error(f'未找到登录名为【{options["u"]}】的账户')
  61. user.password_hash = User.make_password(options['p'])
  62. user.save()
  63. self.echo_success('账户密码已重置')
  64. else:
  65. self.echo_error('未识别的操作')
  66. self.print_help()