import os import uvicorn from fastapi import FastAPI, Depends from starlette.middleware.cors import CORSMiddleware from starlette.templating import Jinja2Templates from tortoise.contrib.fastapi import register_tortoise from tortoise.contrib.pydantic import pydantic_queryset_creator from fastapi_admin.depends import get_model from fastapi_admin.factory import app as admin_app from fastapi_admin.schemas import BulkIn 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', } } } templates = Jinja2Templates(directory='examples/templates') @admin_app.post( '/rest/{resource}/bulk/test_bulk' ) async def test_bulk( bulk_in: BulkIn, model=Depends(get_model) ): qs = model.filter(pk__in=bulk_in.pk_list) pydantic = pydantic_queryset_creator(model) ret = await pydantic.from_queryset(qs) return ret.dict() @admin_app.get( '/home', ) async def home(): return { 'html': templates.get_template('home.html').render() } 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', logo='https://github.com/long2ice/fastapi-admin/raw/master/front/static/img/logo.png', login_footer='FASTAPI ADMIN - FastAPI Admin Dashboard', login_description='FastAPI Admin Dashboard', locale='en-US', locale_switcher=True, theme_switcher=True, ) ) if __name__ == '__main__': uvicorn.run('main:app', port=8000, debug=False, reload=False, lifespan='on')