Files
leonapp/windows/console_app.py
Your Name accf0760bb feat: 实现完整的应用商店系统
- 添加前端页面包括首页、应用详情页和版本历史页
- 实现管理员后台功能,包括应用管理、版本管理和登录验证
- 添加API接口用于获取应用列表和详情
- 实现文件上传和下载功能
- 添加Windows控制台和GUI客户端
- 完善数据库结构和初始化脚本
- 添加样式表和图片资源
2025-07-06 19:46:42 +08:00

108 lines
3.9 KiB
Python

import requests
import json
def fetch_apps(search_term=None):
url = 'http://localhost:3232/api.php?action=list'
if search_term:
url += f'&search={search_term}'
try:
response = requests.get(url)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"获取应用列表失败: {e}")
return []
def get_app_details(app_id):
url = f'http://localhost:3232/api.php?action=app&id={app_id}'
try:
response = requests.get(url)
response.raise_for_status()
return response.json()
except requests.exceptions.HTTPError as e:
if response.status_code == 404:
try:
error_data = response.json()
print(f"获取应用详情失败: {error_data.get('error')}")
print(f"执行的SQL: {error_data.get('sql')}")
except ValueError:
print(f"获取应用详情失败: {e}")
else:
print(f"获取应用详情失败: {e}")
return None
except requests.exceptions.RequestException as e:
print(f"获取应用详情失败: {e}")
return None
def download_app(version_id):
url = f'http://localhost:3232/api.php?action=download&version_id={version_id}'
try:
response = requests.get(f'http://localhost:3232/api/download/{version_id}', stream=True)
response.raise_for_status()
filename = response.headers.get('Content-Disposition', '').split('filename=')[-1].strip('"')
if not filename:
filename = f'app_version_{version_id}.apk'
with open(filename, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print(f'下载成功: {filename}')
return True
except requests.exceptions.RequestException as e:
print(f'下载失败: {e}')
return False
def display_apps(apps):
if not apps:
print('没有找到应用程序')
return
print('=== 应用商店 ===')
for i, app in enumerate(apps, 1):
print(f'[{i}] {app.get("name")}')
print(f' 描述: {app.get("description", "")}')
print(f' 评分: {app.get("avg_rating", "暂无")}/5')
print(f' 适用平台: {", ".join(app.get("platforms", []))}')
if __name__ == "__main__":
while True:
print("\n=== 应用商店控制台 ===")
print("1. 浏览所有应用")
print("2. 搜索应用")
print("3. 查看应用详情")
print("4. 下载应用")
print("5. 退出")
choice = input("请选择操作 (1-5): ")
if choice == "1":
apps = fetch_apps()
display_apps(apps)
elif choice == "2":
search_term = input("请输入搜索关键词: ")
apps = fetch_apps(search_term)
display_apps(apps)
elif choice == "3":
app_id = input("请输入应用ID: ")
app = get_app_details(app_id)
if app:
print("\n=== 应用详情 ===")
print(f"名称: {app.get('name')}")
print(f"描述: {app.get('description', '')}")
print(f"评分: {app.get('avg_rating', '暂无')}/5")
print(f"适用平台: {', '.join(app.get('platforms', []))}")
print("版本:")
for version in app.get('versions', []):
print(f" - {version.get('version_name')} (ID: {version.get('id')})")
else:
print("应用不存在或获取失败")
elif choice == "4":
version_id = input("请输入版本ID: ")
download_app(version_id)
elif choice == "5":
print("谢谢使用,再见!")
break
else:
print("无效的选择,请重试")