FastAPI 和 fastapi-amis-admin:强大而可扩展的后台管理解决方案!

news2025/1/16 9:01:09

ddf538278f75fe5437d0b23c82d59db0.jpeg

大家好,我是安果!

我们都知道 Django 生态丰富,功能强大,适用于中、大型项目,并且自带了后台管理系统;而 FastAPI  更适用于构建高性能的 API,后台管理系统需要另外开发

本篇文章将介绍 FastAPI 结合 fastapi-amis-admin 快速搭建后台管理系统的步骤

fastapi-amis-admin 是一款高性能、高效且易于扩展的 FastAPI 管理框架;它受到 django-admin 的启发,拥有与 django-admin 一样多的强大功能

项目地址:

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

1、安装依赖

# 1、更新pip
python3 -m pip install --upgrade pip

# 2、安装依赖fastapi_amis_admin
pip install fastapi_amis_admin

# 3、安装数据库管理依赖
# sqlite
pip install aiosqlite  

# mysql
pip install aiomysql

需要注意的是,fastapi-amis-admin 对 Python 最低兼容版本为 Python3.7,如果安装了低版本,需要先更新版本

2、基础使用

这里以 sqlite 和 mysql 为例

sqlite:保存在本地

mysql:连接远程数据库

首先,创建一个 AdminSite 对象,指定数据库连接信息

然后,创建数据模型对象(继承于 SQLModel)映射数据库中的某张表,定义表名及表字段,配置到后台管理(继承于 ModelAdmin)中去

PS:如果数据库中已经存在表,就直接使用;如果不存在,就创建一张新的表

接着,创建一个 FastAPI 应用,使用 AdminSite 对象进行挂载

最后,在初始化事件方法中初始化数据库表

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
# username:数据库配置信息(用户名)
# password:数据库配置信息(密码)
# ip:数据库配置信息(ip地址)
# port:数据库配置信息(数据库端口号)
# 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')

# 注册ModelAdmin
@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,可以提供可自由扩展的可视化管理界面

我们需要先安装依赖

# 用户认证权限
pip3 install fastapi-user-auth

我们接着对上面的代码进行修改(仅需 3 步)

首先,将 AdminSite 替换为其子类 AuthAdminSite,创建一个后台管理授权对象

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

from fastapi_amis_admin.admin import admin

# 自定义Model
# 表名:custom_model
class CustomModel(SQLModel, table=True):
    __tablename__ = 'custom_model'
    id: int = Field(primary_key=True, nullable=False, unique=True)
    name: str = Field(title="名称", max_length=100)
    url: str = Field(max_length=1000, title="URL地址")

# 注册ModelAdmin
@site.register_admin
class CustomAdmin(admin.ModelAdmin):
    page_schema = '自定义表'
    model = CustomModel

最后,在初始化事件中初始化数据库表的同时,创建一个默认的管理员

PS:默认的管理员账号密码是 admin/admin,可以自行修改密码或者创建账号及权限设置

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 即可

# 可能遇到的问题
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 隐藏浏览器指纹特征的几种方式!

END

好文和朋友一起看~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/557466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

完犊子!原单位的离职证明丢了,下周要入职了,用AI做一个行不行?

弄丢了离职证明怎么办? 一位网友哀叹: 完犊子!原单位的离职证明丢了,下周要入职了,现在怎么办?用AI做一个行不行? 有相同经历的网友安慰他,离职证明没了没事,新公司会要求…

打卡智能中国(五):博士都去哪儿了?

《打卡智能中国》系列更新了几期,有读者表示,很爱看这类接地气的真实故事,也有读者反映,不是电工,就是文员、农民、治沙人,人工智能不是高精尖学科吗?那些学历很高的博士都去哪儿了?…

用数据讲故事:十大统计学/机器学习魔法指数

统计学和机器学习为数据分析提供理论基础,入门时我看过很多统计学相关书籍,复杂的公式和推导过程让我一度陷入迷茫。对于数据科学/分析师来说,如何使用统计学知识并应用到我们的分析场景中更为重要。本文主要基于数据分析工作中的实际应用场景…

1000本!计算机经典书籍分享

闲话少说,列表如下。 编程语言类书籍 包含:Java、C、C、Python、Go等语言 Java电子书大全https://www.yingyanshe.cn/5275.htmlC电子书大全https://www.yingyanshe.cn/5284.htmlC语言类电子书https://www.yingyanshe.cn/5293.htmlC#电子书https://www…

chatgpt赋能Python-python_fg

Python FG: 优秀的Python工程师一定要知道的资源 如果你是一名Python工程师,那么你一定会喜欢Python FG资源。Python FG是一个在线平台,提供海量的Python API文档、教程、实例、以及与Python有关的各种工具和资源,让Python工程师轻松学习和使…

盘点!Instruction Tuning 时代的大模型

作者 | Kevin吴嘉文 整理 | NewBeeNLP 公众号 https://zhuanlan.zhihu.com/p/616830127 Alpaca,ChatGLM 等模型的效果可以接受,下文总结部分笔记,为训练自定义小型化(7B)模型提供点知识储备。包括模型论文 LaMDA, Mup…

纯净版Win10系统重装教程(超详细)

本博客详细讲解纯净版Win10系统重装,步骤齐全,小白可实操。 纯净版Win10系统重装教程 系统安装前准备下载安装工具更新重装 制作U盘为启动盘 重装Win10进入Boot模式选择系统版本分区系统安装中新系统配置 系统安装前准备 ➢ 准备8G或8G以上的空U盘。&a…

POSTGRESQL 10个使用POSTGRESQL 需要避免的错误 (译)

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

EOS网络基金会大战Block.One

微信公众号修改了推送规则,请各位亲爱的读者给刘教链公众号添加星标🌟,以便及时收到每日最新文章推送! 星标🌟添加方法:【1】点击标题下方“刘教链 刘教链”的第二个“刘教链”,打开公众号主页&…

chatgpt赋能Python-python_field

Python在Field上的应用 Python作为一门高级编程语言,在众多领域中扮演着应用广泛、易于学习、使用简便、速度出色的角色。在本文中,我们将重点关注Python在Field上的应用。 Field是什么? Field指的是“领域”,包括科学、工程、…

活动报名|分布式人工智能:可扩展性、效率和泛化性

2023年05月25日(星期四)14:00-15:30,智源社区「智源Live 第42期」线上活动将在线举办,「阅读原文」报名即可参加。 活动主题:分布式人工智能:可扩展性、效率和泛化性 安波 安波是新加坡南洋理工大学校长委员…

chatgpt赋能Python-python_for_end

Python for End: 介绍 Python是一种高级编程语言,由Guido van Rossum创建于1989年,并在1991年正式发布。Python是一种多范式编程语言,可以用于面向对象、函数式和过程式编程。它拥有简单易懂的语法以及扩展性强的库,从而使得开发…

见证ES6革命:深入学习let、const、var的区别、解构赋值、箭头函数等常用知识点,开创全新开发模式。

let、const、var的区别 使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象。使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升。使用const声明的是常量,在后面出现的代码块中,不能在修改改常量的值。 var let const 函数级作用域 块级…

ThingsBoard教程(五十):规则节点解析 创建关系节点Create Relation Node,删除关系节点 Delete Relation Node

创建关系节点 Create Relation Node Since TB Version 2.2.1 根据类型和方向,从所选实体创建到消息发起方的关系。 以下消息发起方类型被允许:资产、设备、实体视图、客户、租、仪表板。 通过元数据键模式查找目标实体,然后在源实体和目标实体之间创建关系。 如果选择的…

AbstractStringBuilder源码

介绍 AbstractStringBuilder这个抽象类是StringBuilder和StringBuffer的直接父类,而且定义了很多方法,因此在学习这两个类之前建议先学习 AbstractStringBuilder抽象类 该类在源码中注释是以JDK1.5开始作为前两个类的父类存在的 abstract class Abstr…

【已解决】使用selenium启动谷歌Chrome浏览器打开指定网站,页面空白,而使用其它浏览器手动打开该网站则正常

问题描述 1、在使用python实现自动化网络爬虫时,我使用到selenium来驱动谷歌Chrome浏览器来打开某一个网页,然后爬取数据,代码如下: from selenium import webdriver import timedriver webdriver.Chrome() driver.get(https://…

基于JavaSpringBoot+Vue+uniapp实现微信小程序新闻资讯平台

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

多模态大模型时代下的文档图像智能分析与处理

多模态大模型时代下的文档图像智能分析与处理 0. 前言1. 人工智能发展历程1.1 传统机器学习1.2 深度学习1.3 多模态大模型时代 2. CCIG 文档图像智能分析与处理论坛2.1 文档图像智能分析与处理的重要性和挑战2.2 文档图像智能分析与处理高峰论坛2.3 走进合合信息 3. 文档图像智…

<SQL>《SQL命令(含例句)精心整理版(2)》

《SQL命令(含例句)精心整理版(2)》 跳转《SQL命令(含例句)精心整理版(1)8 函数8.1 文本处理函数8.2 数值处理函数8.3 时间处理函数8.3.1 时间戳转化为自定义格式from_unixtime8.3.2 …

案例17:Java代驾管理系统设计与实现开题报告

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…