File size: 4,795 Bytes
b55a977 9d377df b55a977 9d377df b55a977 9fa456d b55a977 9d377df b55a977 9d377df b55a977 9d377df 9fa456d 9d377df 9fa456d 9d377df 9fa456d 9d377df 9fa456d 9d377df 9fa456d 9d377df 9fa456d 9d377df 9fa456d 9d377df |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
from flask import Flask
from flask_login import LoginManager
from app.database import db, User
import os
import sqlite3
from pathlib import Path
login_manager = LoginManager()
login_manager.login_view = 'main.login'
login_manager.login_message = '๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค.'
login_manager.login_message_category = 'info'
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
def create_app():
# ํ
ํ๋ฆฟ ํด๋ ๊ฒฝ๋ก ๋ช
์์ ์ค์
template_folder = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'templates')
app = Flask(__name__, template_folder=template_folder)
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY', 'dev-secret-key-change-in-production')
app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL', 'sqlite:///finance_analysis.db')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024 # 100MB ํ์ผ ํฌ๊ธฐ ์ ํ
db.init_app(app)
login_manager.init_app(app)
from app.routes import main_bp
app.register_blueprint(main_bp)
with app.app_context():
db.create_all()
# ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์
(nickname ์ปฌ๋ผ ์ถ๊ฐ)
migrate_database(app)
# ์ด๊ธฐ ๊ด๋ฆฌ์ ๊ณ์ ์์ฑ
create_admin_user()
return app
def migrate_database(app):
"""๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์
"""
try:
# ๋ฐ์ดํฐ๋ฒ ์ด์ค URI์์ ๊ฒฝ๋ก ์ถ์ถ
db_uri = app.config['SQLALCHEMY_DATABASE_URI']
if db_uri.startswith('sqlite:///'):
db_path = db_uri.replace('sqlite:///', '')
# ์๋ ๊ฒฝ๋ก์ธ ๊ฒฝ์ฐ instance ํด๋ ๊ธฐ์ค์ผ๋ก ์ฒ๋ฆฌ
if not os.path.isabs(db_path):
db_path = os.path.join(app.instance_path, db_path)
if not os.path.exists(db_path):
print(f"[๋ง์ด๊ทธ๋ ์ด์
] ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ์ด ์์ต๋๋ค: {db_path}")
return
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# user ํ
์ด๋ธ์ nickname ์ปฌ๋ผ์ด ์๋์ง ํ์ธ
cursor.execute("PRAGMA table_info(user)")
user_columns = [column[1] for column in cursor.fetchall()]
if 'nickname' not in user_columns:
print("[๋ง์ด๊ทธ๋ ์ด์
] user ํ
์ด๋ธ์ nickname ์ปฌ๋ผ ์ถ๊ฐ ์ค...")
cursor.execute("ALTER TABLE user ADD COLUMN nickname VARCHAR(80)")
conn.commit()
print("[๋ง์ด๊ทธ๋ ์ด์
] user.nickname ์ปฌ๋ผ ์ถ๊ฐ ์๋ฃ")
# uploaded_file ํ
์ด๋ธ์ด ์กด์ฌํ๋์ง ํ์ธ
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='uploaded_file'")
if cursor.fetchone():
# uploaded_file ํ
์ด๋ธ์ uploaded_by ์ปฌ๋ผ์ด ์๋์ง ํ์ธ
cursor.execute("PRAGMA table_info(uploaded_file)")
uploaded_file_columns = [column[1] for column in cursor.fetchall()]
if 'uploaded_by' not in uploaded_file_columns:
print("[๋ง์ด๊ทธ๋ ์ด์
] uploaded_file ํ
์ด๋ธ์ uploaded_by ์ปฌ๋ผ ์ถ๊ฐ ์ค...")
cursor.execute("ALTER TABLE uploaded_file ADD COLUMN uploaded_by INTEGER")
conn.commit()
print("[๋ง์ด๊ทธ๋ ์ด์
] uploaded_file.uploaded_by ์ปฌ๋ผ ์ถ๊ฐ ์๋ฃ")
# uploaded_file ํ
์ด๋ธ์ parent_file_id ์ปฌ๋ผ์ด ์๋์ง ํ์ธ
if 'parent_file_id' not in uploaded_file_columns:
print("[๋ง์ด๊ทธ๋ ์ด์
] uploaded_file ํ
์ด๋ธ์ parent_file_id ์ปฌ๋ผ ์ถ๊ฐ ์ค...")
cursor.execute("ALTER TABLE uploaded_file ADD COLUMN parent_file_id INTEGER")
conn.commit()
print("[๋ง์ด๊ทธ๋ ์ด์
] uploaded_file.parent_file_id ์ปฌ๋ผ ์ถ๊ฐ ์๋ฃ")
conn.close()
print("[๋ง์ด๊ทธ๋ ์ด์
] ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์
์๋ฃ")
except Exception as e:
print(f"[๋ง์ด๊ทธ๋ ์ด์
] ์ค๋ฅ ๋ฐ์: {e}")
import traceback
traceback.print_exc()
def create_admin_user():
"""์ด๊ธฐ ๊ด๋ฆฌ์ ๊ณ์ ์์ฑ"""
admin_username = 'soymedia'
admin_password = 's0ymedi@1@34'
admin = User.query.filter_by(username=admin_username).first()
if not admin:
admin = User(username=admin_username, is_admin=True, is_active=True)
admin.set_password(admin_password)
db.session.add(admin)
db.session.commit()
print(f'๊ด๋ฆฌ์ ๊ณ์ ์ด ์์ฑ๋์์ต๋๋ค: {admin_username}')
|