FastAPI и fastapi-amis-admin: мощные и масштабируемые решения для управления серверной частью!
FastAPI и fastapi-amis-admin: мощные и масштабируемые решения для управления серверной частью!
Всем привет,Я Анго!

Мы все знаем, что Django имеет богатую экосистему и мощные функции, подходит для средних и крупных проектов и поставляется с собственной системой управления серверной частью, в то время как FastAPI больше подходит для создания высокопроизводительных API, и система управления серверной частью должна быть такой; разрабатывается отдельно.

В этой статье будут представлены шаги по быстрому созданию внутренней системы управления с использованием FastAPI в сочетании с fastapi-amis-admin.

fastapi-amis-admin — это высокопроизводительная, эффективная и легко расширяемая среда управления FastAPI, созданная на основе django-admin и имеющая столько же мощных функций, как и django-admin;

Адрес проекта:

https://github.com/amisadmin/fastapi-amis-admin

1. Установите зависимости

Язык кода:javascript
копировать
# 1. Обновить пип
python3 -m pip install --upgrade pip

# 2. Установите зависимость fastapi_amis_admin
pip install fastapi_amis_admin

# 3. Установите зависимости базы данных
# sqlite
pip install aiosqlite  

# mysql
pip install aiomysql 

Следует отметить, что минимальной совместимой версией Python для fastapi-amis-admin является Python3.7. Если установлена ​​более ранняя версия, вам необходимо сначала обновить ее.

2. Основное использование

Здесь мы возьмем sqlite и mysql в качестве примеров.

sqlite: сохранить локально

MySQL: подключиться к удаленной базе данных

Сначала создайте объект AdminSite и укажите информацию о подключении к базе данных.

Затем создайте объект модели данных (унаследованный от SQLModel) для сопоставления таблицы в базе данных, определите имя таблицы и поля таблицы и настройте его в фоновом управлении (унаследованном от ModelAdmin).

PS: Если таблица уже существует в базе данных, используйте ее напрямую, если она не существует, создайте новую таблицу.

Затем создайте приложение FastAPI и используйте объект AdminSite для его монтирования.

Наконец, инициализируйте таблицу базы данных в методе события инициализации.

Язык кода:javascript
копировать
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
from fastapi_amis_admin.models.fields import Field

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

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

# Mysql
# имя пользователя: информация о конфигурации базы данных (имя пользователя)
# пароль: информация о конфигурации базы данных (пароль)
# ip: информация о конфигурации базы данных (IP-адрес)
# порт: информация о конфигурации базы данных (номер порта базы данных)
# dbname: информация о конфигурации базы данных (имя базы данных)
site = AdminSite(settings=Settings(database_url_async='mysql+aiomysql://username:password@ip:port/dbname'))


# Сначала создайте модель SQLModel для сопоставления таблиц в базе данных.
class Category(SQLModel, table=True):
    id: int = Field(default=None, primary_key=True, nullable=False)
    name: str = Field(title='CategoryName')
    description: str = Field(default='', title='Description')

# Регистрация администратора модели
@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(SQLModel.metadata.create_all, is_session=False)


if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app, debug=True)

3. Аутентификация пользователя и настройка разрешений.

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

Здесь рекомендуется использовать FastAPI-User-Auth.

Адрес проекта:

https://github.com/amisadmin/fastapi-user-auth

FastAPI-User-Auth — это простая и мощная библиотека аутентификации и авторизации пользователей FastAPI RBAC. Основанная на FastAPI-Amis-Admin, она может предоставить свободно масштабируемый интерфейс визуального управления.

Сначала нам нужно установить зависимости

Язык кода:javascript
копировать
# центр аутентификации пользователя
pip3 install fastapi-user-auth

Затем мы модифицируем приведенный выше код (требуется всего 3 шага)

Сначала замените AdminSite его подклассом AuthAdminSite и создайте объект авторизации фонового управления.

Язык кода:javascript
копировать
from fastapi_user_auth.site import AuthAdminSite

# Создать экземпляр кулисамиуправлять Авторизоватьвернослон
site = AuthAdminSite(settings=Settings(database_url_async='mysql+aiomysql://username:password@ip:port/dbname'))
auth = site.auth

Затем на основе созданного объекта SQLModel зарегистрируйте ModelAdmin.

Язык кода:javascript
копировать
from fastapi_amis_admin.admin import admin

# Пользовательская модель
# Имя таблицы: custom_model
class CustomModel(SQLModel, table=True):
    __tablename__ = 'custom_model'
    id: int = Field(primary_key=True, nullable=False, unique=True)
    name: str = Поле(title="имя", max_length=100)
    url: str = Field(max_length=1000, title="URL-адрес")

# Регистрация администратора модели
@site.register_admin
class CustomAdmin(admin.ModelAdmin):
    page_schema = «Пользовательская таблица»
    model = CustomModel

Наконец, при инициализации таблиц базы данных в событии инициализации создайте администратора по умолчанию.

PS: Пароль учетной записи администратора по умолчанию — admin/admin. Вы можете изменить пароль или создать учетную запись и настройки разрешений самостоятельно.

Язык кода:javascript
копировать
from fastapi_amis_admin.admin import admin

# Создать исходную таблицу базы данных
@app.on_event("startup")
async def startup():
    await site.db.async_run_sync(SQLModel.metadata.create_all, is_session=False)
    await auth.create_role_user(role_key='admin')

4. Проблемы с развертыванием

При развертывании на сервере вы можете столкнуться с проблемами несовместимости urllib3. Нам нужно установить только определенную версию urllib3.

Язык кода:javascript
копировать
# Возможные проблемы
urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with OpenSSL 1.0.2k-fips  26 Jan 2017. 

# решение
# Установите конкретную версию urllib
pip3 install urllib3==1.26.6

Рекомендуем к прочтению

Как использовать Selenium для сканирования открытых браузеров!

Как использовать Playwright Сканируйте открытые браузеры!

Наиболее полное резюме | Давайте поговорим о нескольких способах, которыми Selenium скрывает функции отпечатков пальцев браузера!

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose