new project

This commit is contained in:
long2ice
2021-04-25 17:17:21 +08:00
parent 28d66950fe
commit 7f957661ec
83 changed files with 2721 additions and 2752 deletions

80
fastapi_admin/app.py Normal file
View 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)