1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Atomi-fastapi_amis_admin

Клонировать/Скачать
README.zh.md 16 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 10.03.2025 16:44 e54e7c4

русский | English

Описание проекта

FastAPI-Amis-Admin

FastAPI-Amis-Admin — это высокопроизводительный, эффективный и легко расширяемый фреймворк для создания административных панелей на основе FastAPI.
Вдохновлен Django-Admin и обладает мощными возможностями, сравнимыми с ними.

Pytest Package version Downloads Chat on Gitter QQ Group 229036692

Исходный код · Онлайн демо · Документация · Если документация недоступна?

---fastapi-amis-admin — это фреймework для создания веб-административных панелей на основе fastapi + amis. Он использует Python 3.7+ и основан на стандартных типах Python. Целью разработки fastapi-amis-admin было улучшение экосистемы приложений на основе fastapi, позволяя быстро создавать визуальные административные панели для веб-приложений на основе fastapi.## Ключевые характеристики

  • Высокая производительность: основана на FastAPI, что позволяет использовать все преимущества этого фреймворка.

  • Большая скорость выполнения: полные типы данных для кода, повышающие повторное использование кода.

  • Поддерживает асинхронное и синхронное программирование вместе: ORM основан на SQLModel + Sqlalchemy, что позволяет свободно настраивать тип базы данных, поддерживаются как асинхронные, так и синхронные режимы, что делает его легко расширяемым.

  • Разделение клиентской и серверной части: Клиентская часть отрисовывается с помощью Amis, а серверные API-интерфейсы генерируются автоматически с помощью fastapi-amis-admin. Интерфейсы могут повторно использоваться.

  • Высокая расширяемость: Внутренние страницы поддерживают как страницы Amis, так и обычные HTML страницы, что позволяет разработчикам легко кастомизировать внешний вид.

  • Автоматическое создание документации API: Документация API создаётся автоматически благодаря FastAPI, что облегчает отладку и делится между разработчиками.

Основные зависимости

  • FastAPI — для веб-части
  • SQLModel — для отображения моделей ORM (идеальное сочетание SQLAlchemy+Pydantic, имеет все возможности SQLAlchemy и Pydantic)
  • Amis — для отображения административных страниц## Структура проекта

Проект fastapi-amis-admin состоит из трёх основных модулей, из которых amis и crud можно использовать как независимые компоненты, а admin строится на основе этих двух.

  • amis: Библиотека для создания моделей Pydantic на основе baidu amis, используется для быстрого создания/парсинга данных JSON amis.
  • crud: На основе FastAPI + Sqlalchemy, используется для быстрой реализации универсальных API-интерфейсов CRUD(Create, Read, Update, Delete).
  • admin: Вдохновлён Django-Admin, объединяет amis + crud, используется для быстрого создания административного интерфейса управления.

Установка

pip install fastapi_amis_admin

Внимание

  • sqlmodel временно не поддерживает sqlalchemy 2.0+, если вы используете sqlalchemy 2.0+ для создания модели, то не рекомендуется одновременно использовать sqlmodel.
  • Версия fastapi-amis-admin>=0.6.0 больше не требует обязательного использования sqlmodel. Если вы используете sqlmodel для создания модели, установите его следующим образом:
pip install fastapi_amis_admin[sqlmodel]

Пример простой конфигурации

from fastapi import FastAPI
from fastapi_amis_admin.admin.settings import Settings
from fastapi_amis_admin.admin.site import AdminSite

# Создание приложения FastAPI
app = FastAPI()

# Создание экземпляра AdminSite
site = AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///amisadmin.db'))

# Подключение административной панели
site.mount_app(app)

if __name__ == '__main__':
    import uvicorn

    uvicorn.run(app)
```## Пример управления моделями

### Создание модели

- Поддерживает модели `SQLModel`, `SQLAlchemy` и `SQLAlchemy 2.0`.
- Метод 1: Создание модели через `SQLModel`.

```python
from sqlmodel import SQLModel
from fastapi_amis_admin.models.fields import Field
from sqlmodel import SQLModel
import sqlmodel


class Base(sqlmodel.SQLModel):
    pass


# Создание модели SQLModel, подробнее см.: https://sqlmodel.tiangolo.com/
class Категория(sqlmodel.SQLModel, table=True):
    id: int = sqlmodel.Field(default=None, primary_key=True, nullable=False)
    имя: str = sqlmodel.Field(title='Название категории', max_length=100, unique=True, index=True, nullable=False)
    описание: str = sqlmodel.Field(default='', title='Описание', max_length=255)


# Второй способ: создание модели через SQLAlchemy
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

# Создание модели SQLAlchemy, подробнее см.: https://docs.sqlalchemy.org/en/14/orm/tutorial.html
class Категория(Base):
    __tablename__ = 'категория'
    __pydantic_model__ = КатегорияSchema  # Указание соответствующего Schema класса. Опционально, но рекомендовано.

    id = Column(Integer, primary_key=True, nullable=False)
    имя = Column(String(100), unique=True, index=True, nullable=False)
    описание = Column(String(255), default='')


# Третий способ: создание модели через SQLAlchemy 2.0
from sqlalchemy import String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column

class Base(DeclarativeBase):
    pass

# Создание модели SQLAlchemy 2.0, подробнее см.: https://docs.sqlalchemy.org/en/20/orm/quickstart.html
class Категория(Base):
    __tablename__ = "категория"
    __pydantic_model__ = КатегорияSchema  # Указание соответствующего Schema класса. Опционально, но рекомендовано.
```    id: Mapped[int] = mapped_column(primary_key=True, nullable=False)
    имя: Mapped[str] = mapped_column(String(100), unique=True, index=True, nullable=False)
    описание: Mapped[str] = mapped_column(String(255), default="")

# Если вы используете SQLAlchemy для создания моделей, рекомендуется также создать соответствующую модель Pydantic,
# и установить `orm_mode=True`.

from pydantic import BaseModel, Field

class КатегорияSchema(BaseModel):
    id: int = Field(default=None, primary_key=True, nullable=False)
    имя: str = Field(title="Название категории")
    описание: str = Field(default="", title="Описание категории")

    class Config:
        orm_mode = True

Регистрация управления моделями

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

Создание приложения FastAPI

app = FastAPI()

Создание экземпляра AdminSite

site = AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///amisadmin.db'))

Регистрация модели CategoryAdmin

@site.register_admin class CategoryAdmin(admin.ModelAdmin): page_schema = 'Управление категориями' # Конфигурирование управляемой модели model = Category

Подключение административной панели к приложению

site.mount_app(app)

Создание таблиц базы данных

@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)

Пример управления формами

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
```# Создание приложения FastAPI
app = FastAPI()

# Создание экземпляра AdminSite
site = AdminSite(settings=Settings(database_url_async="sqlite+aiosqlite:///amisadmin.db"))

# Регистрация формы UserLoginFormAdmin
@site.register_admin
class UserLoginFormAdmin(admin.FormAdmin):
    page_schema = "UserLoginForm"
    # Конфигурирование формы, можно пропустить
    form = Form(title="Это тестовый логинный форма", submit_text="Войти")

    # Создание модели данных формы
    class Schema(BaseModel):
        username: str = Field(..., title="Имя пользователя", min_length=3, max_length=30)
        password: str = Field(..., title="Пароль")

    # Обработка отправленных данных формы
    async def handle(self, request: Request, data: BaseModel, **kwargs) -> BaseApiOut[Any]:
        if data.username == "amisadmin" and data.password == "amisadmin":
            return BaseApiOut(msg="Вы успешно вошли!", data={"token": "xxxxxx"})
        return BaseApiOut(status=-1, msg="Неправильное имя пользователя или пароль!")

# Подключение административной панели к приложению
site.mount_app(app)

if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app)


## Использование командной строки

```bash
# Установка расширения командной строки
pip install fastapi_amis_admin[cli]

# Просмотр справки
faa --help

# Инициализация проекта FastAPI-Amis-Admin
faa new project_name --init

Инициализация приложения FastAPI-Amis-Admin

faa new app_name

Быстрый запуск проекта

faa run

Предварительный просмотр интерфейса

  • Откройте http://127.0.0.1:8000/admin/ в вашем браузере:

ModelAdmin

  • Откройте http://127.0.0.1:8000/admin/docs в вашем браузере:

Docs## Связанные проекты

  • Amis-Admin-Theme-Editor: тема редактора FastAPI-Amis-Admin. Добавление пользовательских CSS стилей и применение тем, изменения вступают в силу немедленно.
  • FastAPI-User-Auth: простая и мощная библиотека аутентификации и авторизации пользователей RBAC для FastAPI.
  • FastAPI-Scheduler: расширение FastAPI, основанное на APScheduler, для управления задачами с использованием планировщика.
  • FastAPI-Config: расширение FastAPI-Amis-Admin для визуального динамического управления конфигурациями.
  • FastAPI-Amis-Admin-Demo: пример приложения FastAPI-Amis-Admin.
  • FastAPI-User-Auth-Demo: пример приложения FastAPI-User-Auth.

Лицензионное соглашение

  • fastapi-amis-admin доступен бесплатно для использования на условиях лицензии Apache2.0. Можно использовать для коммерческих целей, но требуется указание информации о правах использования FastAPI-Amis-Admin на странице отображения.

Благодарность

Благодарим следующих разработчиков за вклад в проект FastAPI-Amis-Admin:

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/Atomi-fastapi_amis_admin.git
git@api.gitlife.ru:oschina-mirror/Atomi-fastapi_amis_admin.git
oschina-mirror
Atomi-fastapi_amis_admin
Atomi-fastapi_amis_admin
master