manage.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. # coding=utf-8
  2. from functools import wraps
  3. from getpass import getpass
  4. import sys
  5. import os
  6. commands = {}
  7. commands_desc = {}
  8. # 工具函数
  9. def check_input_password(password):
  10. if len(password.strip()) < 6:
  11. return check_input_password(getpass('密码长度必须大于6位,请重新输入管理员账户密码:'))
  12. password2 = getpass('再次输入:')
  13. if password == password2.strip():
  14. return password
  15. else:
  16. return check_input_password(getpass('两次输入密码不一致,请重新输入管理员账户密码:'))
  17. def check_input_username(username):
  18. if username.strip():
  19. return username
  20. else:
  21. return check_input_username(input('请输入管理员账户登录名:'))
  22. # 注册命令
  23. def registry_command(cmd_str, cmd_desc=''):
  24. def decorate(func):
  25. commands[cmd_str] = func
  26. commands_desc[cmd_str] = cmd_desc
  27. @wraps(func)
  28. def wrapper(*args, **kwargs):
  29. return func(*args, **kwargs)
  30. return wrapper
  31. return decorate
  32. @registry_command('init_db', '初始化数据库')
  33. def init_db():
  34. from public import db
  35. from config import BASE_DIR
  36. import apps.account.models
  37. import apps.configuration.models
  38. import apps.deploy.models
  39. import apps.assets.models
  40. import apps.schedule.models
  41. import apps.setting.models
  42. user_input = input('是否要初始化数据库,该操作会清空所有数据[y|n]?')
  43. if user_input.strip() == 'y':
  44. db.drop_all()
  45. db.create_all()
  46. with open(os.path.join(BASE_DIR, 'libs', 'sql', 'permissions.sql'), 'r') as f:
  47. line = f.readline()
  48. while line:
  49. if line.startswith('INSERT INTO'):
  50. db.engine.execute(line.strip())
  51. line = f.readline()
  52. print('数据库已初始化成功!')
  53. user_input = input('是否需要创建管理员账户[y|n]?')
  54. if user_input.strip() == 'y':
  55. create_admin()
  56. @registry_command('create_admin', '创建管理员账户')
  57. def create_admin():
  58. from apps.account.models import User
  59. admin = User.query.filter_by(is_supper=True).first()
  60. if admin:
  61. user_input = input('已存在管理员账户 <%s>,需要重置密码[y|n]?' % admin.username)
  62. if user_input.strip() == 'y':
  63. password = check_input_password(getpass('请输入新的管理员账户密码:'))
  64. admin.password = password
  65. admin.token_expired = 0
  66. admin.save()
  67. print('重置管理员密码成功!')
  68. else:
  69. username = check_input_username(input('请输入管理员账户登录名:'))
  70. password = check_input_password(getpass('请输入管理员账户密码:'))
  71. User(username=username, password=password, nickname='管理员', is_supper=True).save()
  72. print('创建管理员账户成功!')
  73. @registry_command('enable_admin', '启用管理员账户,用于登录失败次数过多账户被禁用时使用')
  74. def enable_admin():
  75. from apps.account.models import User
  76. admin = User.query.filter_by(is_supper=True).first()
  77. admin.update(is_active=True)
  78. print('管理员账户状态已修改为启用!')
  79. def print_usage():
  80. cmd_desc_str = '''
  81. usage: %s <command>
  82. command:
  83. '''
  84. for k in commands_desc.keys():
  85. cmd_desc_str += '\t{0}\n\t\t-- {1}\n'.format(str(k), str(commands_desc.get(k) if commands_desc.get(k) else ''))
  86. print(cmd_desc_str % sys.argv[0])
  87. if __name__ == '__main__':
  88. if len(sys.argv) == 1:
  89. print_usage()
  90. sys.exit(1)
  91. cmd = sys.argv.pop(0)
  92. arg1 = sys.argv.pop(0)
  93. r_func = commands.get(arg1)
  94. if callable(r_func):
  95. r_func(*sys.argv)
  96. else:
  97. print('遇到了不可能会出现的错误!')