manage.py 3.5 KB

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