2026-01-08 14:26:34 +08:00
|
|
|
|
# app.py
|
2026-01-08 13:53:19 +08:00
|
|
|
|
import os
|
|
|
|
|
|
import sys
|
2026-01-08 14:26:34 +08:00
|
|
|
|
from flask import Flask
|
|
|
|
|
|
from extensions import db, cors # ✅ 从 extensions 导入
|
|
|
|
|
|
from models import Device, DeviceHistory, MaintenanceLog # 导入模型以便 SQLAlchemy 识别
|
|
|
|
|
|
from routes.api import api_bp
|
2026-01-08 13:53:19 +08:00
|
|
|
|
|
|
|
|
|
|
# 解决 Windows 下控制台输出乱码问题
|
|
|
|
|
|
sys.stdout.reconfigure(encoding='utf-8')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_app():
|
|
|
|
|
|
app = Flask(__name__)
|
|
|
|
|
|
|
2026-01-08 14:26:34 +08:00
|
|
|
|
# 1. 配置路径
|
2026-01-08 13:53:19 +08:00
|
|
|
|
basedir = os.path.abspath(os.path.dirname(__file__))
|
|
|
|
|
|
instance_path = os.path.join(basedir, 'instance')
|
|
|
|
|
|
if not os.path.exists(instance_path):
|
|
|
|
|
|
os.makedirs(instance_path)
|
|
|
|
|
|
print(f"📁 检测到目录不存在,已自动创建: {instance_path}")
|
|
|
|
|
|
|
|
|
|
|
|
db_path = os.path.join(instance_path, 'devices.db')
|
|
|
|
|
|
|
2026-01-08 14:26:34 +08:00
|
|
|
|
# 配置
|
2026-01-08 13:53:19 +08:00
|
|
|
|
app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{db_path}'
|
|
|
|
|
|
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
2026-01-08 14:26:34 +08:00
|
|
|
|
app.config['JSON_AS_ASCII'] = False
|
2026-01-08 13:53:19 +08:00
|
|
|
|
|
2026-01-08 14:26:34 +08:00
|
|
|
|
# 2. 初始化插件 (使用 init_app 模式)
|
|
|
|
|
|
cors.init_app(app) # ✅
|
|
|
|
|
|
db.init_app(app) # ✅
|
2026-01-08 13:53:19 +08:00
|
|
|
|
|
2026-01-08 14:26:34 +08:00
|
|
|
|
# 3. 注册蓝图
|
|
|
|
|
|
# 注意:api.py 里已经写了 url_prefix='/api',这里不要再写,否则变 /api/api/...
|
2026-01-08 13:53:19 +08:00
|
|
|
|
app.register_blueprint(api_bp)
|
|
|
|
|
|
|
|
|
|
|
|
# 4. 初始化数据库表
|
|
|
|
|
|
with app.app_context():
|
|
|
|
|
|
db.create_all()
|
|
|
|
|
|
|
|
|
|
|
|
return app
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app = create_app()
|
|
|
|
|
|
|
|
|
|
|
|
@app.shell_context_processor
|
|
|
|
|
|
def make_shell_context():
|
|
|
|
|
|
return {
|
|
|
|
|
|
'db': db,
|
|
|
|
|
|
'Device': Device,
|
|
|
|
|
|
'DeviceHistory': DeviceHistory,
|
|
|
|
|
|
'MaintenanceLog': MaintenanceLog
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
|
print("🚀 服务正在启动: http://127.0.0.1:5000")
|
|
|
|
|
|
app.run(debug=True, host='0.0.0.0', port=5000)
|