安装配置

这东西安装特别简单,一行命令搞定:


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就是这么个既能提高开发效率,又不失灵活性的好帮手。

点赞(0) 打赏
立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部