amisadmin/fastapi-amis-admin
Fork: 155 Star: 1070 (更新于 2024-10-30 03:41:47)
license: Apache-2.0
Language: Python .
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.
最后发布版本: v0.7.2 ( 2024-03-31 14:42:28)
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.
source code · online demo · documentation · can't open the document?
fastapi-amis-admin
is a high-performance and efficient framework based on fastapi
& amis
with Python 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 the Apache2.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.
Features
- High performance: Based on FastAPI. 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.
Dependencies
- FastAPI: Finish the web part.
-
SQLModel: Finish
ORM
model mapping. Perfectly combine SQLAlchemy with Pydantic, and have all their features . - Amis: Finish admin page presentation.
Composition
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 .
Installation
pip install fastapi_amis_admin
Note
- 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]
Simple Example
from fastapi import FastAPI
from fastapi_amis_admin.admin.settings import Settings
from fastapi_amis_admin.admin.site import AdminSite
# 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__':
import uvicorn
uvicorn.run(app)
ModelAdmin Example
Create Model
- Support
SQLModel
model,SQLAlchemy
model,SQLAlchemy 2.0
model - Method 1: Create model through
SQLModel
.
from typing import Optional
from sqlmodel import SQLModel
from fastapi_amis_admin.models.fields import Field
class Base(SQLModel):
pass
# Create an SQLModel, see document for details: https://sqlmodel.tiangolo.com/
class Category(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
.
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
# Create an SQLAlchemy model, see document for details: https://docs.sqlalchemy.org/en/14/orm/tutorial.html
class Category(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
.
from sqlalchemy import String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
# Create an SQLAlchemy 2.0 model, see document for details: https://docs.sqlalchemy.org/en/20/orm/quickstart.html
class Category(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
.
from pydantic import BaseModel, Field
class CategorySchema(BaseModel):
id: Optional[int] = Field(default=None, primary_key=True, nullable=False)
name: str = Field(title="CategoryName")
description: str = Field(default="", title="CategoryDescription")
class Config:
orm_mode = True
Register ModelAdmin
from fastapi import FastAPI
from fastapi_amis_admin.admin.settings import Settings
from fastapi_amis_admin.admin.site import AdminSite
from fastapi_amis_admin.admin import admin
# create FastAPI application
app = FastAPI()
# create AdminSite instance
site = AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///amisadmin.db'))
# register ModelAdmin
@site.register_admin
class CategoryAdmin(admin.ModelAdmin):
page_schema = 'Category'
# set model
model = Category
# mount AdminSite instance
site.mount_app(app)
# create initial database table
@app.on_event("startup")
async def startup():
await site.db.async_run_sync(Base.metadata.create_all, is_session=False)
if __name__ == '__main__':
import uvicorn
uvicorn.run(app)
FormAdmin Example
from typing import Any
from fastapi import FastAPI
from pydantic import BaseModel
from starlette.requests import Request
from fastapi_amis_admin.amis.components import Form
from fastapi_amis_admin.admin import admin
from fastapi_amis_admin.admin.settings import Settings
from fastapi_amis_admin.admin.site import AdminSite
from fastapi_amis_admin.crud.schema import BaseApiOut
from fastapi_amis_admin.models.fields import Field
# create FastAPI application
app = FastAPI()
# create AdminSite instance
site = AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///amisadmin.db'))
# register FormAdmin
@site.register_admin
class UserLoginFormAdmin(admin.FormAdmin):
page_schema = 'UserLoginForm'
# set form information, optional
form = Form(title='This is a test login form', submitText='login')
# create form schema
class schema(BaseModel):
username: str = Field(..., title='username', min_length=3, max_length=30)
password: str = Field(..., title='password')
# handle form submission data
async def handle(self, request: Request, data: BaseModel, **kwargs) -> BaseApiOut[Any]:
if data.username == 'amisadmin' and data.password == 'amisadmin':
return BaseApiOut(msg='Login successfully!', data={'token': 'xxxxxx'})
return BaseApiOut(status=-1, msg='Incorrect username or password!')
# mount AdminSite instance
site.mount_app(app)
if __name__ == '__main__':
import uvicorn
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
- Open
http://127.0.0.1:8000/admin/
in your browser:
- Open
http://127.0.0.1:8000/admin/docs
in your browser:
Project
-
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.
License
- 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.
最近版本更新:(数据更新于 2024-09-15 11:06:41)
2024-03-31 14:42:28 v0.7.2
2024-01-11 12:27:12 v0.7.1
2023-12-22 11:07:22 v0.7.0
2023-12-09 22:56:14 v0.6.9
2023-11-23 15:53:56 v0.6.8
2023-09-28 16:23:59 v0.6.7
2023-09-16 15:56:45 v0.6.6
2023-09-10 16:02:20 v0.6.5
2023-08-11 18:54:29 v0.6.4
2023-08-05 18:02:45 v0.6.3
主题(topics):
amis, django-admin, fastapi, fastapi-admin, fastapi-amis-admin, sqlalchemy, sqlmodel, starlette
amisadmin/fastapi-amis-admin同语言 Python最近更新仓库
2024-11-05 15:03:24 Cinnamon/kotaemon
2024-11-05 11:00:51 home-assistant/core
2024-11-04 23:11:11 DS4SD/docling
2024-11-04 10:56:18 open-compass/opencompass
2024-11-04 08:51:21 yt-dlp/yt-dlp
2024-11-02 04:45:40 princeton-vl/infinigen