fastapi-amis-admin is a high-performance, efficient and easily extensible FastAPI admin framework.
Inspired by Django-admin, and has as many powerful functions as Django-admin.
source code · online demo · documentation · can't open the document?
fastapi-amis-admin
is a high-performance and efficient framework based onfastapi
&amis
withPython 3.7+
,and
based on standard Python type hints. The original intention of the development is to improve the application ecology and
to quickly generate a visual dashboard for the web application. According to theApache2.0
protocol, it is free and
open source. But in order to better operate and maintain this project in the long run, I very much hope to get
everyone's sponsorship and support.
- High performance:Based onFastAPI.Enjoy all the benefits.
- High efficiency:Perfect code type hints. Higher code reusability.
- Support asynchronous and synchronous hybrid writing:
ORM
is based onSQLModel
&Sqlalchemy
.Freely customize database type. Support synchronous and asynchronous mode. Strong scalability. - Front-end separation:The front-end is rendered by
Amis
,the back-end interface is automatically generated byfastapi-amis-admin
.The interface is reusable. - Strong scalability:The background page supports
Amis
pages and ordinaryhtml
pages. Easily customize the interface freely. - Automatic api documentation:Automatically generate Interface documentation by
FastAPI
.Easily debug and share interfaces.
- FastAPI:Finish the web part.
- SQLModel:Finish
ORM
model mapping. Perfectly combineSQLAlchemywithPydantic,and have all their features. - Amis:Finish admin page presentation.
fastapi-amis-admin
consists of three core modules, of which,amis
,crud
can be used as separate
modules,admin
is developed by the former.
amis
:Based on thepydantic
data model building library ofbaidu amis
.To generate/parse data rapidly.crud
:Based onFastAPI
&Sqlalchemy
.To quickly build Create, Read, Update, Delete common API interface.admin
:Inspired byDjango-Admin
.Combineamis
withcrud
.To quickly build Web Admin dashboard.
pip install fastapi_amis_admin
- After version
fastapi-amis-admin>=0.6.0
,sqlmodel
is no longer a required dependency library. If you usesqlmodel
to create a model, you can install it with the following command.
pip install fastapi_amis_admin[sqlmodel]
fromfastapiimportFastAPI
fromfastapi_amis_admin.admin.settingsimportSettings
fromfastapi_amis_admin.admin.siteimportAdminSite
# create FastAPI application
app=FastAPI()
# create AdminSite instance
site=AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///amisadmin.db'))
# mount AdminSite instance
site.mount_app(app)
if__name__=='__main__':
importuvicorn
uvicorn.run(app)
- Support
SQLModel
model,SQLAlchemy
model,SQLAlchemy 2.0
model - Method 1: Create model through
SQLModel
.
fromtypingimportOptional
fromsqlmodelimportSQLModel
fromfastapi_amis_admin.models.fieldsimportField
classBase(SQLModel):
pass
# Create an SQLModel, see document for details: https://sqlmodel.tiangolo /
classCategory(SQLModel,table=True):
id:Optional[int]=Field(default=None,primary_key=True,nullable=False)
name:str=Field(title='CategoryName',max_length=100,unique=True,index=True,nullable=False)
description:str=Field(default='',title='Description',max_length=255)
- Method 2: Create model through
SQLAlchemy
.
fromsqlalchemyimportColumn,Integer,String
fromsqlalchemy.ext.declarativeimportdeclarative_base
Base=declarative_base()
# Create an SQLAlchemy model, see document for details: https://docs.sqlalchemy.org/en/14/orm/tutorial.html
classCategory(Base):
__tablename__='category'
# Specify the Schema class corresponding to the model. It is recommended to specify it. If omitted, it can be automatically generated.
__pydantic_model__=CategorySchema
id=Column(Integer,primary_key=True,nullable=False)
name=Column(String(100),unique=True,index=True,nullable=False)
description=Column(String(255),default='')
- Method 3: Create model through
SQLAlchemy 2.0
.
fromsqlalchemyimportString
fromsqlalchemy.ormimportDeclarativeBase,Mapped,mapped_column
classBase(DeclarativeBase):
pass
# Create an SQLAlchemy 2.0 model, see document for details: https://docs.sqlalchemy.org/en/20/orm/quickstart.html
classCategory(Base):
__tablename__="category"
# Specify the Schema class corresponding to the model. It is recommended to specify it. If omitted, it can be automatically generated.
__pydantic_model__=CategorySchema
id:Mapped[int]=mapped_column(primary_key=True,nullable=False)
name:Mapped[str]=mapped_column(String(100),unique=True,index=True,nullable=False)
description:Mapped[str]=mapped_column(String(255),default="")
- If you create a model through
sqlalchemy
,it is recommended to create a corresponding pydantic model at the same time, and setorm_mode=True
.
frompydanticimportBaseModel,Field
classCategorySchema(BaseModel):
id:Optional[int]=Field(default=None,primary_key=True,nullable=False)
name:str=Field(title="CategoryName")
description:str=Field(default="",title="CategoryDescription")
classConfig:
orm_mode=True
fromfastapiimportFastAPI
fromfastapi_amis_admin.admin.settingsimportSettings
fromfastapi_amis_admin.admin.siteimportAdminSite
fromfastapi_amis_admin.adminimportadmin
# create FastAPI application
app=FastAPI()
# create AdminSite instance
site=AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///amisadmin.db'))
# register ModelAdmin
@site.register_admin
classCategoryAdmin(admin.ModelAdmin):
page_schema='Category'
# set model
model=Category
# mount AdminSite instance
site.mount_app(app)
# create initial database table
@app.on_event("startup")
asyncdefstartup():
awaitsite.db.async_run_sync(Base.metadata.create_all,is_session=False)
if__name__=='__main__':
importuvicorn
uvicorn.run(app)
fromtypingimportAny
fromfastapiimportFastAPI
frompydanticimportBaseModel
fromstarlette.requestsimportRequest
fromfastapi_amis_admin.amis.componentsimportForm
fromfastapi_amis_admin.adminimportadmin
fromfastapi_amis_admin.admin.settingsimportSettings
fromfastapi_amis_admin.admin.siteimportAdminSite
fromfastapi_amis_admin.crud.schemaimportBaseApiOut
fromfastapi_amis_admin.models.fieldsimportField
# create FastAPI application
app=FastAPI()
# create AdminSite instance
site=AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///amisadmin.db'))
# register FormAdmin
@site.register_admin
classUserLoginFormAdmin(admin.FormAdmin):
page_schema='UserLoginForm'
# set form information, optional
form=Form(title='This is a test login form',submitText='login')
# create form schema
classschema(BaseModel):
username:str=Field(...,title='username',min_length=3,max_length=30)
password:str=Field(...,title='password')
# handle form submission data
asyncdefhandle(self,request:Request,data:BaseModel,**kwargs)->BaseApiOut[Any]:
ifdata.username=='amisadmin'anddata.password=='amisadmin':
returnBaseApiOut(msg='Login successfully!',data={'token':'xxxxxx'})
returnBaseApiOut(status=-1,msg='Incorrect username or password!')
# mount AdminSite instance
site.mount_app(app)
if__name__=='__main__':
importuvicorn
uvicorn.run(app)
#Install command line extension
pip install fastapi_amis_admin[cli]
#View help
faa --help
#Initialize a `FastAPI-Amis-Admin` project
faa new project_name --init
#Initialize a `FastAPI-Amis-Admin` application
faa new app_name
#Fast running project
faa run
- Open
http://127.0.0.1:8000/admin/
in your browser:
- Open
http://127.0.0.1:8000/admin/docs
in your browser:
Amis-Admin-Theme-Editor
:Theme-Editor for the fastapi-amis-admin. Allows to add custom css styles and to apply theme --vars change on the fly.FastAPI-User-Auth
:A simple and powerfulFastAPI
userRBAC
authentication and authorization library.FastAPI-Scheduler
:A simple scheduled task managementFastAPI
extension based onAPScheduler
.FastAPI-Config
:A visual dynamic configuration management extension package based onFastAPI-Amis-Admin
.FastAPI-Amis-Admin-Demo
:An exampleFastAPI-Amis-Admin
application.FastAPI-User-Auth-Demo
:An exampleFastAPI-User-Auth
application.
- According to the
Apache2.0
protocol,fastapi-amis-admin
is free and open source. It can be used for commercial for free, but please clearly display copyright information aboutFastAPI-Amis-Admin
on the display interface.