mirror of
https://github.com/fastapi-admin/fastapi-admin.git
synced 2025-08-14 10:47:30 +08:00
new project
This commit is contained in:
80
fastapi_admin/app.py
Normal file
80
fastapi_admin/app.py
Normal file
@ -0,0 +1,80 @@
|
||||
from typing import Dict, List, Optional, Type
|
||||
|
||||
from fastapi import FastAPI
|
||||
from starlette.middleware.base import BaseHTTPMiddleware
|
||||
from tortoise import Model
|
||||
|
||||
from . import middlewares, template
|
||||
from .providers.login import LoginProvider
|
||||
from .resources import Dropdown
|
||||
from .resources import Model as ModelResource
|
||||
from .resources import Resource
|
||||
from .routes import router
|
||||
|
||||
|
||||
class FastAdmin(FastAPI):
|
||||
logo_url: str
|
||||
admin_path: str
|
||||
resources: List[Type[Resource]] = []
|
||||
model_resources: Dict[Type[Model], Type[Resource]] = {}
|
||||
login_provider: Optional[Type[LoginProvider]] = LoginProvider
|
||||
|
||||
def configure(
|
||||
self,
|
||||
logo_url: str = None,
|
||||
default_locale: str = "en_US",
|
||||
admin_path: str = "/admin",
|
||||
template_folders: Optional[List[str]] = None,
|
||||
login_provider: Optional[Type[LoginProvider]] = LoginProvider,
|
||||
):
|
||||
"""
|
||||
Config FastAdmin
|
||||
:param maintenance: If set True, all request will redirect to maintenance page
|
||||
:param logo_url:
|
||||
:param default_locale:
|
||||
:param admin_path:
|
||||
:param template_folders:
|
||||
:param login_provider:
|
||||
:return:
|
||||
"""
|
||||
template.set_locale(default_locale)
|
||||
self.admin_path = admin_path
|
||||
self.logo_url = logo_url
|
||||
if template_folders:
|
||||
template.add_template_folder(*template_folders)
|
||||
self.login_provider = login_provider
|
||||
self._register_providers()
|
||||
|
||||
def _register_providers(self):
|
||||
if self.login_provider:
|
||||
login_path = self.login_provider.login_path
|
||||
app.get(login_path)(self.login_provider.get)
|
||||
app.post(login_path)(self.login_provider.post)
|
||||
app.get(self.login_provider.logout_path)(self.login_provider.logout)
|
||||
app.add_middleware(BaseHTTPMiddleware, dispatch=self.login_provider.authenticate)
|
||||
|
||||
def register_resources(self, *resource: Type[Resource]):
|
||||
for r in resource:
|
||||
self.register(r)
|
||||
|
||||
def _set_model_resource(self, resource: Type[Resource]):
|
||||
if issubclass(resource, ModelResource):
|
||||
self.model_resources[resource.model] = resource
|
||||
elif issubclass(resource, Dropdown):
|
||||
for r in resource.resources:
|
||||
self._set_model_resource(r)
|
||||
|
||||
def register(self, resource: Type[Resource]):
|
||||
self._set_model_resource(resource)
|
||||
self.resources.append(resource)
|
||||
|
||||
def get_model_resource(self, model: Type[Model]):
|
||||
return self.model_resources[model]
|
||||
|
||||
|
||||
app = FastAdmin(
|
||||
title="FastAdmin",
|
||||
description="A fast admin dashboard based on fastapi and tortoise-orm with tabler ui.",
|
||||
)
|
||||
app.add_middleware(BaseHTTPMiddleware, dispatch=middlewares.language_processor)
|
||||
app.include_router(router)
|
Reference in New Issue
Block a user