前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastAPI 和 fastapi-amis-admin:强大而可扩展的后台管理解决方案!

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

作者头像
AirPython
发布2023-08-22 08:21:57
1.5K0
发布2023-08-22 08:21:57
举报
文章被收录于专栏:Python 自动化Python 自动化
大家好,我是安果!

我们都知道 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、更新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 对象进行挂载

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

代码语言: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
# 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,可以提供可自由扩展的可视化管理界面

我们需要先安装依赖

代码语言: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

# 自定义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,可以自行修改密码或者创建账号及权限设置

代码语言: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 隐藏浏览器指纹特征的几种方式!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AirPython 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
API 网关
腾讯云 API 网关(API Gateway)是腾讯云推出的一种 API 托管服务,能提供 API 的完整生命周期管理,包括创建、维护、发布、运行、下线等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档