Skip to content

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.

License

Notifications You must be signed in to change notification settings

amisadmin/fastapi-amis-admin

Repository files navigation

Giản thể tiếng Trung |English

Introduction

FastAPI-Amis-Admin

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.

Pytest Package version Downloads Chat on Gitter

source code · online demo · documentation · can't open the document?


fastapi-amis-adminis a high-performance and efficient framework based onfastapi&amiswithPython 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.0protocol, 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.

Features

  • High performance:Based onFastAPI.Enjoy all the benefits.
  • High efficiency:Perfect code type hints. Higher code reusability.
  • Support asynchronous and synchronous hybrid writing:ORMis based onSQLModel&Sqlalchemy.Freely customize database type. Support synchronous and asynchronous mode. Strong scalability.
  • Front-end separation:The front-end is rendered byAmis,the back-end interface is automatically generated byfastapi-amis-admin.The interface is reusable.
  • Strong scalability:The background page supportsAmispages and ordinaryhtmlpages. Easily customize the interface freely.
  • Automatic api documentation:Automatically generate Interface documentation byFastAPI.Easily debug and share interfaces.

Dependencies

Composition

fastapi-amis-adminconsists of three core modules, of which,amis,crudcan be used as separate modules,adminis developed by the former.

  • amis:Based on thepydanticdata 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.Combineamiswithcrud.To quickly build Web Admin dashboard.

Installation

pip install fastapi_amis_admin

Note

  • After versionfastapi-amis-admin>=0.6.0,sqlmodelis 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]

Simple Example

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)

ModelAdmin Example

Create Model

  • SupportSQLModelmodel,SQLAlchemymodel,SQLAlchemy 2.0model
  • Method 1: Create model throughSQLModel.
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 throughSQLAlchemy.
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 throughSQLAlchemy 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 throughsqlalchemy,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

Register ModelAdmin

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)

FormAdmin Example

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)

Working with Command

#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

Preview

  • Openhttp://127.0.0.1:8000/admin/in your browser:

ModelAdmin

  • Openhttp://127.0.0.1:8000/admin/docsin your browser:

Docs

Project

License

  • According to theApache2.0protocol,fastapi-amis-adminis free and open source. It can be used for commercial for free, but please clearly display copyright information aboutFastAPI-Amis-Adminon the display interface.

About

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.

Topics

Resources

License

Stars

Watchers

Forks