homedocs/app/__init__.py
2025-03-30 21:52:20 +02:00

76 lines
No EOL
2.3 KiB
Python

from flask import Flask, g, redirect, url_for, render_template
import datetime
import os
def create_app(config_name='development'):
app = Flask(__name__,
static_folder='static',
template_folder='templates')
# Load configuration
if config_name == 'production':
app.config.from_object('config.ProductionConfig')
elif config_name == 'testing':
app.config.from_object('config.TestingConfig')
else:
app.config.from_object('config.DevelopmentConfig')
# Initialize extensions
from app.core.extensions import db, migrate, login_manager, bcrypt, limiter, csrf
db.init_app(app)
migrate.init_app(app, db)
login_manager.init_app(app)
bcrypt.init_app(app)
csrf.init_app(app)
limiter.init_app(app)
# Initialize login manager
from app.core.auth import User
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
login_manager.login_view = 'auth.login'
login_manager.login_message = 'Please log in to access this page.'
login_manager.login_message_category = 'info'
# Register template filters
from app.core.template_filters import bp as filters_bp
app.register_blueprint(filters_bp)
# Create database tables without seeding any data
with app.app_context():
try:
db.create_all()
print("Database tables created successfully")
except Exception as e:
print(f"Error with database setup: {e}")
# Register blueprints
from app.routes.auth import bp as auth_bp
app.register_blueprint(auth_bp)
from app.routes.dashboard import bp as dashboard_bp
app.register_blueprint(dashboard_bp)
from app.routes.ipam import bp as ipam_bp
app.register_blueprint(ipam_bp)
from app.routes.api import bp as api_bp
app.register_blueprint(api_bp)
# Add error handlers
@app.errorhandler(404)
def page_not_found(e):
return render_template('errors/404.html', title='Page Not Found'), 404
@app.errorhandler(500)
def internal_server_error(e):
return render_template('errors/500.html', title='Server Error'), 500
@app.errorhandler(403)
def forbidden(e):
return render_template('errors/403.html', title='Forbidden'), 403
return app