2025-12-2genxin
This commit is contained in:
145
database/user_cli.py
Normal file
145
database/user_cli.py
Normal file
@@ -0,0 +1,145 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
用户数据库命令行接口
|
||||
用于Go后端调用执行用户操作
|
||||
"""
|
||||
|
||||
import sys
|
||||
import json
|
||||
from user_database import UserDatabase
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print(json.dumps({"error": "缺少命令参数"}))
|
||||
sys.exit(1)
|
||||
|
||||
command = sys.argv[1]
|
||||
db = UserDatabase()
|
||||
|
||||
try:
|
||||
if command == "create":
|
||||
# 创建用户: python user_cli.py create <username> <password> <email>
|
||||
if len(sys.argv) < 5:
|
||||
print(json.dumps({"error": "参数不足: 需要用户名、密码和邮箱"}))
|
||||
sys.exit(1)
|
||||
|
||||
username = sys.argv[2]
|
||||
password = sys.argv[3]
|
||||
email = sys.argv[4]
|
||||
|
||||
user_id = db.create_user(username, password, email)
|
||||
print(json.dumps({
|
||||
"success": True,
|
||||
"user_id": user_id,
|
||||
"username": username
|
||||
}))
|
||||
|
||||
elif command == "verify":
|
||||
# 验证密码: python user_cli.py verify <username> <password>
|
||||
if len(sys.argv) < 4:
|
||||
print(json.dumps({"error": "参数不足: 需要用户名和密码"}))
|
||||
sys.exit(1)
|
||||
|
||||
username = sys.argv[2]
|
||||
password = sys.argv[3]
|
||||
|
||||
user = db.verify_password(username, password)
|
||||
if user:
|
||||
# 删除密码哈希
|
||||
user_data = {k: v for k, v in user.items() if k != 'password_hash'}
|
||||
# 转换datetime为字符串
|
||||
if 'created_at' in user_data and user_data['created_at']:
|
||||
user_data['created_at'] = str(user_data['created_at'])
|
||||
if 'last_login_at' in user_data and user_data['last_login_at']:
|
||||
user_data['last_login_at'] = str(user_data['last_login_at'])
|
||||
|
||||
# 更新登录时间
|
||||
db.update_login_time(user['user_id'])
|
||||
|
||||
print(json.dumps({
|
||||
"success": True,
|
||||
**user_data
|
||||
}))
|
||||
else:
|
||||
print(json.dumps({"error": "用户名或密码错误"}))
|
||||
sys.exit(1)
|
||||
|
||||
elif command == "get":
|
||||
# 获取用户信息: python user_cli.py get <user_id>
|
||||
if len(sys.argv) < 3:
|
||||
print(json.dumps({"error": "参数不足: 需要用户ID"}))
|
||||
sys.exit(1)
|
||||
|
||||
user_id = int(sys.argv[2])
|
||||
user = db.get_user_by_id(user_id)
|
||||
|
||||
if user:
|
||||
# 删除密码哈希
|
||||
user_data = {k: v for k, v in user.items() if k != 'password_hash'}
|
||||
# 转换datetime为字符串
|
||||
if 'created_at' in user_data and user_data['created_at']:
|
||||
user_data['created_at'] = str(user_data['created_at'])
|
||||
if 'last_login_at' in user_data and user_data['last_login_at']:
|
||||
user_data['last_login_at'] = str(user_data['last_login_at'])
|
||||
|
||||
print(json.dumps(user_data))
|
||||
else:
|
||||
print(json.dumps({"error": "用户不存在"}))
|
||||
sys.exit(1)
|
||||
|
||||
elif command == "update":
|
||||
# 更新用户信息: python user_cli.py update <user_id> [--email <email>] [--bio <bio>]
|
||||
if len(sys.argv) < 3:
|
||||
print(json.dumps({"error": "参数不足: 需要用户ID"}))
|
||||
sys.exit(1)
|
||||
|
||||
user_id = int(sys.argv[2])
|
||||
kwargs = {}
|
||||
|
||||
# 解析命令行参数
|
||||
i = 3
|
||||
while i < len(sys.argv):
|
||||
if sys.argv[i] == "--email" and i + 1 < len(sys.argv):
|
||||
kwargs['email'] = sys.argv[i + 1]
|
||||
i += 2
|
||||
elif sys.argv[i] == "--bio" and i + 1 < len(sys.argv):
|
||||
kwargs['bio'] = sys.argv[i + 1]
|
||||
i += 2
|
||||
elif sys.argv[i] == "--password" and i + 1 < len(sys.argv):
|
||||
kwargs['password'] = sys.argv[i + 1]
|
||||
i += 2
|
||||
else:
|
||||
i += 1
|
||||
|
||||
if not kwargs:
|
||||
print(json.dumps({"error": "没有提供需要更新的字段"}))
|
||||
sys.exit(1)
|
||||
|
||||
success = db.update_user(user_id, **kwargs)
|
||||
|
||||
if success:
|
||||
print(json.dumps({"success": True, "message": "更新成功"}))
|
||||
else:
|
||||
print(json.dumps({"error": "更新失败"}))
|
||||
sys.exit(1)
|
||||
|
||||
else:
|
||||
print(json.dumps({"error": f"未知命令: {command}"}))
|
||||
sys.exit(1)
|
||||
|
||||
except db.UserExistsError as e:
|
||||
print(json.dumps({"error": str(e), "type": "UserExistsError"}))
|
||||
sys.exit(1)
|
||||
except db.ValidationError as e:
|
||||
print(json.dumps({"error": str(e), "type": "ValidationError"}))
|
||||
sys.exit(1)
|
||||
except db.UserNotFoundError as e:
|
||||
print(json.dumps({"error": str(e), "type": "UserNotFoundError"}))
|
||||
sys.exit(1)
|
||||
except Exception as e:
|
||||
print(json.dumps({"error": str(e), "type": "Exception"}))
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user