mirror of
https://github.com/fastapi-admin/fastapi-admin.git
synced 2025-08-14 18:58:13 +08:00
159 lines
4.4 KiB
Python
159 lines
4.4 KiB
Python
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, Menu
|
|
|
|
TORTOISE_ORM = {
|
|
'connections': {
|
|
'default': 'mysql://root:123456@127.0.0.1:3306/fastapi-admin'
|
|
},
|
|
'apps': {
|
|
'models': {
|
|
'models': ['examples.models'],
|
|
'default_connection': 'default',
|
|
}
|
|
}
|
|
}
|
|
|
|
templates = Jinja2Templates(directory='templates')
|
|
|
|
|
|
@admin_app.post(
|
|
'/{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=True)
|
|
|
|
register_tortoise(fast_app, config=TORTOISE_ORM, generate_schemas=True)
|
|
|
|
fast_app.mount('/admin', admin_app)
|
|
admin_app.debug = True
|
|
admin_app.init(
|
|
user_model='User',
|
|
admin_secret='test',
|
|
models='examples.models',
|
|
permission=True,
|
|
site=Site(
|
|
name='FastAPI-admin Demo',
|
|
logo='https://github.com/long2ice/fastapi-admin/raw/master/front/static/img/logo.png',
|
|
locale='en-US',
|
|
locale_switcher=True,
|
|
menus=[
|
|
Menu(
|
|
name='Home',
|
|
url='/',
|
|
icon='fa fa-home'
|
|
),
|
|
Menu(
|
|
name='Content',
|
|
title=True
|
|
),
|
|
Menu(
|
|
name='Product',
|
|
url='/rest/Product',
|
|
icon='icon-list',
|
|
search_fields=('type',),
|
|
fields_type={
|
|
'type': 'radiolist',
|
|
'image': 'link'
|
|
},
|
|
bulk_actions=[
|
|
{
|
|
'value': 'delete',
|
|
'text': 'delete_all',
|
|
}
|
|
, {
|
|
'value': 'test_bulk',
|
|
'text': 'TestBulk'
|
|
}
|
|
]
|
|
),
|
|
Menu(
|
|
name='Category',
|
|
url='/rest/Category',
|
|
icon='icon-list'
|
|
),
|
|
Menu(
|
|
name='External',
|
|
title=True
|
|
),
|
|
Menu(
|
|
name='Github',
|
|
url='https://github.com/long2ice/fastapi-admin',
|
|
icon='fa fa-github',
|
|
external=True
|
|
),
|
|
Menu(
|
|
name='Auth',
|
|
title=True
|
|
),
|
|
Menu(
|
|
name='User',
|
|
url='/rest/User',
|
|
icon='fa fa-user',
|
|
exclude=('password',),
|
|
search_fields=('username',),
|
|
fields_type={
|
|
'avatar': 'image'
|
|
},
|
|
),
|
|
Menu(
|
|
name='Role',
|
|
url='/rest/Role',
|
|
icon='fa fa-group'
|
|
),
|
|
Menu(
|
|
name='Permission',
|
|
url='/rest/Permission',
|
|
icon='fa fa-user-plus'
|
|
),
|
|
Menu(
|
|
name='Logout',
|
|
url='/logout',
|
|
icon='fa fa-lock'
|
|
)
|
|
]
|
|
)
|
|
)
|
|
|
|
fast_app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=['*'],
|
|
allow_credentials=True,
|
|
allow_methods=['*'],
|
|
allow_headers=['*'],
|
|
)
|
|
|
|
return fast_app
|
|
|
|
|
|
app = create_app()
|
|
|
|
if __name__ == '__main__':
|
|
uvicorn.run('main:app', port=8000, debug=True, reload=True, lifespan='on')
|