基础的切片和质量控制

This commit is contained in:
2026-04-10 13:58:18 +08:00
commit 975f06eb46
3302 changed files with 650758 additions and 0 deletions

82
app/__init__.py Normal file
View File

@@ -0,0 +1,82 @@
import os
import json
from flask import Flask, request, session, current_app
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from sqlalchemy import event
from sqlalchemy.engine import Engine
db = SQLAlchemy()
login_manager = LoginManager()
@event.listens_for(Engine, "connect")
def set_sqlite_pragma(dbapi_connection, connection_record):
if dbapi_connection.__class__.__module__ == "sqlite3":
cursor = dbapi_connection.cursor()
cursor.execute("PRAGMA journal_mode=WAL")
cursor.execute("PRAGMA synchronous=NORMAL")
cursor.close()
# Load all i18n jsons
i18n_dict = {}
def load_i18n(app):
global i18n_dict
i18n_dir = os.path.join(app.root_path, '..', 'assets', 'i18n')
if os.path.exists(i18n_dir):
for f in os.listdir(i18n_dir):
if f.endswith('.json'):
lang_code = f.replace('.json', '')
with open(os.path.join(i18n_dir, f), 'r', encoding='utf-8') as jf:
i18n_dict[lang_code] = json.load(jf)
def get_locale():
# 用户手动选择的语言保存在 cookie 中优先
lang = request.cookies.get('lang')
if lang in i18n_dict:
return lang
# Check accept_languages with our available dict keys
best_match = request.accept_languages.best_match(list(i18n_dict.keys()))
return best_match if best_match else 'en'
def _t(key):
lang = get_locale()
# Fallback to english if language missing or key missing
if lang in i18n_dict and key in i18n_dict[lang]:
return i18n_dict[lang][key]
if 'en' in i18n_dict and key in i18n_dict['en']:
return i18n_dict['en'][key]
return key # fallback to the key itself
def create_app():
app = Flask(__name__, static_url_path='/assets', static_folder='../assets')
app.config['SECRET_KEY'] = 'your-secret-key-change-it-in-production'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///aio_3d.db'
app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {'connect_args': {'timeout': 15}}
app.config['UPLOAD_FOLDER'] = os.path.abspath(os.path.join(app.root_path, '..', 'uploads'))
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
load_i18n(app)
db.init_app(app)
login_manager.init_app(app)
# Inject translation function into jinja
@app.context_processor
def inject_i18n():
return dict(_=_t)
login_manager.login_view = 'auth.login'
with app.app_context():
from . import models
db.create_all()
from .routes import main_bp, auth_bp, admin_bp
app.register_blueprint(main_bp)
app.register_blueprint(auth_bp)
app.register_blueprint(admin_bp)
return app