这东西安装特别简单,一行命令搞定:
pip install fastapi-admin
需要注意的是,它还依赖了一些其他包,建议创建个虚拟环境:
python -m venv venv
source venv/bin/activate # Windows用户用 venv\Scripts\activate
pip install fastapi-admin fastapi uvicorn tortoise-orm
⚠️ 小贴士:
- 用虚拟环境可以避免包版本冲突
- tortoise-orm是必需的,因为fastapi-admin就是基于它开发的
- 确保Python版本 >= 3.7
来看个最简单的例子:
from fastapi import FastAPI
from fastapi_admin.app import app as admin_app
from fastapi_admin.providers.login import UsernamePasswordProvider
from tortoise.contrib.fastapi import register_tortoise
# 主应用
app = FastAPI()
# 数据库模型
from tortoise import fields, Model
class Admin(Model):
username = fields.CharField(max_length=20)
password = fields.CharField(max_length=200)
class Meta:
table = “admin”
# 注册后台路由
@app.on_event(“startup”)
async def startup():
await admin_app.configure(
logo_url=“https://example.com/logo.png”,
template_folders=[“templates”],
providers=[
UsernamePasswordProvider(
login_logo_url=“https://example.com/login.png”,
admin_model=Admin,
)
],
)
app.mount(“/admin”, admin_app)
# 配置数据库
register_tortoise(
app,
db_url=“sqlite://db.sqlite3”,
modules={“models”: [“__main__”]},
generate_schemas=True,
)
fastapi-admin最强大的地方在于它的资源管理系统。咱们来整个更复杂的例子:
from fastapi_admin.resources import Field, Link, Model, Action
from fastapi_admin.widgets import displays, inputs
@admin_app.register
class UserResource(Model):
label = “用户管理”
model = User
fields = [
“id”,
Field(
name=“username”,
label=“用户名”,
input_=inputs.Text(),
),
Field(
name=“avatar”,
label=“头像”,
input_=inputs.Image(),
),
Field(
name=“status”,
label=“状态”,
input_=inputs.Select(choices=[
(1, “正常”),
(0, “禁用”),
]),
),
]
# 自定义操作
actions = [
Action(
label=“禁用选中”,
name=“disable”,
async def handler(self, request, pk, values):
await self.model.filter(pk__in=pk).update(status=0)
),
]
⚠️ 小贴士:
- fields里定义的字段决定了列表页和编辑页显示啥
- input_用来指定表单输入控件类型
- actions可以添加批量操作功能
安全性可是个大事儿,fastapi-admin内置了完整的权限管理:
from fastapi_admin.resources import Provider
from fastapi_admin.acl import ACLProvider
@admin_app.register
class CustomACLProvider(ACLProvider):
async def authenticate(self, request, username, password):
user = await Admin.get_or_none(username=username)
if not user or not verify_password(password, user.password):
return None
return user
async def has_page_permission(self, request, page):
# 自定义页面权限逻辑
return True
这框架的扩展性特别强,想咋改就咋改:
from fastapi_admin.template import templates
# 自定义模板
templates.env.globals.update(
site_title=“我的后台”,
site_footer=“powered by 猫哥”,
)
# 自定义页面
@admin_app.get(“/custom”)
async def custom_page():
return templates.TemplateResponse(
“custom.html”,
context={“request”: request},
)
⚠️ 小贴士:
- 模板引擎用的是Jinja2
- 可以自定义任意页面和接口
- CSS和JS文件都能覆盖默认的
别看这框架挺年轻,但是经过这么一通配置,你就能获得一个功能完备的后台系统,包含用户管理、权限控制、资源管理等等。跟那些笨重的传统后台框架相比,它不仅轻便,而且扩展起来也特别灵活。
写代码写久了就会发现,用好工具比自己造轮子强得多。fastapi-admin就是这么个既能提高开发效率,又不失灵活性的好帮手。