Migrate from Quart to Flask and add MariaDB dynamic database
Major Changes: - Migrated web framework from Quart (async) to Flask (sync) - Added MariaDB database integration with SQLAlchemy ORM - Implemented dynamic content management for portfolio New Features: - Database models for Profile, Skills, Projects, ProjectTags, and SocialLinks - RESTful API endpoints for CRUD operations on all entities - Database initialization script (init_db.py) with sample data - Docker Compose configuration with MariaDB service Modified Files: - app.py: Replaced Quart with Flask, added database initialization - config.py: Added database configuration with environment variables - routes/home.py: Converted async to sync, added database queries - requirements.txt: Replaced Quart/Hypercorn with Flask/Gunicorn, added Flask-SQLAlchemy and PyMySQL - docker-compose.yml: Added MariaDB service with health checks - templates/: Updated all templates to use dynamic data from database with Jinja2 - .env.example: Added database configuration variables - README.md: Complete rewrite with new setup instructions and API documentation New Files: - models.py: SQLAlchemy models for all database entities - init_db.py: Database initialization script - routes/api.py: REST API endpoints for content management Benefits: - Simplified architecture (sync vs async) - Better ecosystem compatibility - Dynamic content management via database - Easy content updates through REST API - Improved deployment with standard WSGI server (Gunicorn)
This commit is contained in:
28
app.py
28
app.py
@@ -3,31 +3,43 @@
|
||||
|
||||
# Copyright Hersel Giannella
|
||||
|
||||
from quart import Quart, send_from_directory
|
||||
from flask import Flask, send_from_directory
|
||||
from config import config
|
||||
from models import db
|
||||
from routes.home import route_home
|
||||
from routes.api import route_api
|
||||
|
||||
app = Quart(
|
||||
app = Flask(
|
||||
__name__,
|
||||
template_folder="templates",
|
||||
static_folder="static",
|
||||
)
|
||||
|
||||
# Load configuration
|
||||
app.config['SECRET_KEY'] = config.SECRET_KEY
|
||||
app.config['SQLALCHEMY_DATABASE_URI'] = config.SQLALCHEMY_DATABASE_URI
|
||||
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = config.SQLALCHEMY_TRACK_MODIFICATIONS
|
||||
app.config['SQLALCHEMY_ECHO'] = config.SQLALCHEMY_ECHO
|
||||
|
||||
# Initialize database
|
||||
db.init_app(app)
|
||||
|
||||
# favicon.ico, sitemap.xml and robots.txt
|
||||
@app.route('/favicon.ico')
|
||||
async def favicon():
|
||||
return await send_from_directory(app.static_folder, 'favicon.ico')
|
||||
def favicon():
|
||||
return send_from_directory(app.static_folder, 'favicon.ico')
|
||||
|
||||
@app.route('/sitemap.xml')
|
||||
async def sitemap():
|
||||
return await send_from_directory(app.static_folder, 'sitemap.xml')
|
||||
def sitemap():
|
||||
return send_from_directory(app.static_folder, 'sitemap.xml')
|
||||
|
||||
@app.route('/robots.txt')
|
||||
async def robots():
|
||||
return await send_from_directory(app.static_folder, 'robots.txt')
|
||||
def robots():
|
||||
return send_from_directory(app.static_folder, 'robots.txt')
|
||||
|
||||
# BluePrint Routes
|
||||
app.register_blueprint(route_home)
|
||||
app.register_blueprint(route_api)
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=config.DEBUG, host=config.APP_HOST, port=config.APP_PORT)
|
||||
|
||||
Reference in New Issue
Block a user