Skip to main 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.

Project description

简体中文 | 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-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 by fastapi-amis-admin. The interface is reusable.
  • Strong scalability: The background page supports Amis pages and ordinary html pages. Easily customize the interface freely.
  • Automatic api documentation: Automatically generate Interface documentation by FastAPI. Easily debug and share interfaces.

Dependencies

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 the pydantic data model building library of baidu amis. To generate/parse data rapidly.
  • crud: Based on FastAPI &Sqlalchemy. To quickly build Create, Read, Update, Delete common API interface .
  • admin: Inspired by Django-Admin. Combine amis with crud. To quickly build Web Admin dashboard .

Installation

pip install fastapi_amis_admin

Note

  • sqlmodel currently does not support sqlalchemy 2.0+. If you use sqlalchemy 2.0+ to create a model, you cannot use sqlmodel at the same time.
  • After version fastapi-amis-admin>=0.6.0, sqlmodel is no longer a required dependency library. If you use sqlmodel 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 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: 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 set orm_mode=True.
from pydantic import BaseModel, Field


class CategorySchema(BaseModel):
    id: 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 sqlmodel import SQLModel
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:

ModelAdmin

  • Open http://127.0.0.1:8000/admin/docs in your browser:

Docs

Project

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 about FastAPI-Amis-Admin on the display interface.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastapi_amis_admin-0.7.0a3.tar.gz (100.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastapi_amis_admin-0.7.0a3-py3-none-any.whl (117.5 kB view details)

Uploaded Python 3

File details

Details for the file fastapi_amis_admin-0.7.0a3.tar.gz.

File metadata

  • Download URL: fastapi_amis_admin-0.7.0a3.tar.gz
  • Upload date:
  • Size: 100.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.10.1 CPython/3.11.0

File hashes

Hashes for fastapi_amis_admin-0.7.0a3.tar.gz
Algorithm Hash digest
SHA256 af146875d9152ebdf210659657727ceeebad3044282afa325cfd63e4ce283919
MD5 2f31b013ea296fff00b9c57da2b30e3c
BLAKE2b-256 ac533417c8bd829318e3bb942a3a24efbaec9385e8d0f217743a0fe8145050ed

See more details on using hashes here.

File details

Details for the file fastapi_amis_admin-0.7.0a3-py3-none-any.whl.

File metadata

File hashes

Hashes for fastapi_amis_admin-0.7.0a3-py3-none-any.whl
Algorithm Hash digest
SHA256 83d74d53763d9477c54234101744ebebb1f67f410734f5451dfdd754e97aa108
MD5 87ce781766f376b2489f8db9b72bdf1d
BLAKE2b-256 c441e98d548cf7a4c003b9f5d3889c98a088bc6134b2784081c48bd02d6285ae

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page