You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重写SQLAdmin并配置路由,登录后在仪表盘显示用户名

重写SQLAdmin模板、自定义路由及登录后显示用户名的实现方法

1. 重写SQLAdmin模板

SQLAdmin基于Jinja2模板引擎,重写模板只需指定自定义模板目录并继承原模板修改:

步骤:

  • 创建自定义模板目录,比如templates/admin
  • 复制SQLAdmin官方基础模板(如base.html)到该目录,按需修改内容
  • 初始化Admin时通过template_dir参数指定自定义目录

代码示例:

from fastapi import FastAPI
from sqladmin import Admin, ModelView
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# 初始化FastAPI与数据库连接
app = FastAPI()
engine = create_engine("sqlite:///test.db")
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()

# 示例模型
class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True, index=True)
    username = Column(String, unique=True, index=True)

Base.metadata.create_all(bind=engine)

# 初始化Admin,指定自定义模板目录
admin = Admin(app, engine, template_dir="templates/admin")

# 注册模型视图
class UserAdmin(ModelView, model=User):
    column_list = [User.id, User.username]

admin.add_view(UserAdmin)

2. 自定义路由部署

修改Admin默认路由前缀

初始化Admin时通过base_url参数自定义访问前缀:

admin = Admin(app, engine, template_dir="templates/admin", base_url="/my-admin")

添加自定义路由页面

创建BaseView子类并通过@route装饰器添加自定义端点:

from fastapi import Request
from sqladmin.views import BaseView, route

class CustomDashboardView(BaseView):
    @route("/custom-dashboard", methods=["GET"])
    async def custom_dashboard(self, request: Request):
        # 获取当前登录用户
        user = await self._get_current_user(request)
        return await self.templates.TemplateResponse(
            "custom_dashboard.html",
            {"request": request, "user": user}
        )

admin.add_view(CustomDashboardView)

3. 登录后显示用户名

第一步:配置认证后端

先实现SQLAdmin的认证逻辑,确保能识别当前登录用户:

from sqladmin.authentication import AuthenticationBackend
from typing import Optional

class AdminAuth(AuthenticationBackend):
    async def login(self, request: Request) -> bool:
        form = await request.form()
        username, password = form["username"], form["password"]
        # 替换为你的实际认证逻辑
        if username == "admin" and password == "admin123":
            request.session.update({"token": "valid-admin-token"})
            return True
        return False

    async def logout(self, request: Request) -> bool:
        request.session.clear()
        return True

    async def authenticate(self, request: Request) -> Optional[User]:
        token = request.session.get("token")
        if token == "valid-admin-token":
            # 返回当前用户对象,供模板调用
            return User(username="admin")
        return None

# 初始化Admin时传入认证后端
admin = Admin(
    app,
    engine,
    template_dir="templates/admin",
    authentication_backend=AdminAuth()
)

第二步:修改模板显示用户名

在自定义的base.html模板中,找到合适位置(比如导航栏右上角)添加以下代码:

{% if current_user %}
    <span class="navbar-text ms-auto">欢迎, {{ current_user.username }}</span>
{% endif %}

内容的提问来源于stack exchange,提问作者Aremoh kenneth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:15:22