Files
luntan/app/__init__.py

87 lines
3.7 KiB
Python

import os
from flask import Flask
from .extensions import db, migrate, login_manager, csrf
from .config import Config
from flask_wtf.csrf import generate_csrf
def create_app():
app = Flask(__name__, static_folder="static", template_folder="templates")
app.config.from_object(Config)
os.makedirs(app.config.get("UPLOAD_FOLDER"), exist_ok=True)
os.makedirs(os.path.join(app.config.get("UPLOAD_FOLDER"), "identity"), exist_ok=True)
os.makedirs(os.path.join(app.config.get("UPLOAD_FOLDER"), "posts"), exist_ok=True)
os.makedirs(os.path.join(app.config.get("UPLOAD_FOLDER"), "activities"), exist_ok=True)
db.init_app(app)
migrate.init_app(app, db)
login_manager.init_app(app)
csrf.init_app(app)
with app.app_context():
db.create_all()
from .models import User, UserStatus, Profile
from sqlalchemy import text
try:
db.session.execute(text("ALTER TABLE user ADD COLUMN must_change_password BOOLEAN DEFAULT 0"))
db.session.commit()
except Exception:
pass
from .models import User, UserStatus, Profile
from werkzeug.security import generate_password_hash
admin = User.query.filter_by(username="Admin").first()
if admin:
admin.role = "admin"
admin.status = UserStatus.approved
admin.password_hash = generate_password_hash("lzgzsystem")
admin.must_change_password = False
db.session.commit()
else:
email = "admin@example.com"
if User.query.filter_by(email=email).first():
email = "admin2@example.com"
u = User(email=email, username="Admin", password_hash=generate_password_hash("lzgzsystem"), role="admin", status=UserStatus.approved, must_change_password=False)
db.session.add(u)
db.session.flush()
db.session.add(Profile(user_id=u.id))
db.session.commit()
admin2 = User.query.filter_by(username="Admin2").first()
if admin2:
admin2.role = "admin"
admin2.status = UserStatus.approved
admin2.password_hash = generate_password_hash("lzgzsystem")
admin2.must_change_password = False
db.session.commit()
else:
email2 = "admin2@example.com"
if User.query.filter_by(email=email2).first():
email2 = "admin3@example.com"
u2 = User(email=email2, username="Admin2", password_hash=generate_password_hash("lzgzsystem"), role="admin", status=UserStatus.approved, must_change_password=False)
db.session.add(u2)
db.session.flush()
db.session.add(Profile(user_id=u2.id))
db.session.commit()
@app.context_processor
def inject_csrf():
return dict(csrf_token=generate_csrf())
from .blueprints.auth import bp as auth_bp
from .blueprints.users import bp as users_bp
from .blueprints.posts import bp as posts_bp
from .blueprints.comments import bp as comments_bp
from .blueprints.follows import bp as follows_bp
from .blueprints.feed import bp as feed_bp
from .blueprints.activities import bp as activities_bp
from .blueprints.admin import bp as admin_bp
from .blueprints.main import bp as main_bp
from .blueprints.setup import bp as setup_bp
app.register_blueprint(auth_bp)
app.register_blueprint(main_bp)
app.register_blueprint(setup_bp)
app.register_blueprint(users_bp)
app.register_blueprint(posts_bp)
app.register_blueprint(comments_bp)
app.register_blueprint(follows_bp)
app.register_blueprint(feed_bp)
app.register_blueprint(activities_bp)
app.register_blueprint(admin_bp)
from .cli import register_cli
register_cli(app)
return app