import os import uvicorn from fastapi import FastAPI from starlette.middleware.cors import CORSMiddleware from tortoise.contrib.fastapi import register_tortoise from fastapi_admin.factory import app as admin_app from fastapi_admin.site import Site TORTOISE_ORM = { "connections": {"default": os.getenv("DATABASE_URL")}, "apps": { "models": { "models": ["examples.models", "fastapi_admin.models"], "default_connection": "default", } }, } def create_app(): fast_app = FastAPI(debug=False) register_tortoise(fast_app, config=TORTOISE_ORM, generate_schemas=True) fast_app.mount("/admin", admin_app) fast_app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) return fast_app app = create_app() @app.on_event("startup") async def start_up(): admin_app.debug = False admin_app.init( user_model="User", tortoise_app="models", admin_secret="test", permission=True, site=Site( name="FastAPI-Admin DEMO", login_footer="FASTAPI ADMIN - FastAPI Admin Dashboard", login_description="FastAPI Admin Dashboard", locale="en-US", locale_switcher=True, theme_switcher=True, ), login_view="examples.routes.login", ) if __name__ == "__main__": uvicorn.run("main:app", port=8000, debug=False, reload=False, lifespan="on")