【Python】Flask-Admin:构建强大、灵活的后台管理界面

news/2024/10/15 23:09:04 标签: python, flask, oracle, 开发语言, pygame, pip, 后端

在这里插入图片描述

在 Web 应用开发中,构建一个直观且功能丰富的后台管理系统对于处理数据和维护应用至关重要。虽然构建一个完全自定义的管理后台界面非常耗时,但 Flask-Admin 提供了一个简洁、灵活的解决方案,可以让开发者快速集成一个功能齐全的后台管理系统。它与 Flask 框架无缝集成,能够快速处理数据库模型、视图管理和权限控制等需求。

在本文中,我们将深入介绍 Flask-Admin 的核心功能、如何快速上手以及它如何与数据库、模型等整合,帮助你在短时间内为应用构建一个实用的后台管理系统。

在这里插入图片描述
华丽的分割线

⭕️宇宙起点

    • 🎬 什么是 Flask-Admin?
    • 📦 安装 Flask-Admin
    • ♨️ 快速上手:创建一个简单的管理界面
      • 1. 创建一个基本的 Flask 应用
      • 2. 添加数据库模型管理
      • 3. 自定义模型视图
        • 隐藏敏感字段
        • 设置只读字段
        • 自定义列显示名称
      • 4. 权限控制和身份认证
    • ♨️ Flask-Admin 的其他功能
      • 1. 文件上传
      • 2. 数据导出
    • 📥 下载地址
    • 💬 结语
    • 📒 参考文献


标题1

🎬 什么是 Flask-Admin?

Flask-Admin 是一个基于 Flask 框架的扩展库,它提供了强大的后台管理系统,帮助开发者管理数据库中的内容。Flask-Admin 的主要功能包括:

  • 自动生成管理界面:通过简单的配置,Flask-Admin 可以自动为数据库模型生成增删改查(CRUD)界面。
  • 支持多种数据库:它支持 SQLAlchemy、MongoEngine 等主流数据库 ORM 库,允许开发者轻松管理数据库记录。
  • 可扩展的视图:支持自定义视图、表单和字段验证,使得管理界面更具灵活性。
  • 权限管理:可以与 Flask-Login 等扩展集成,实现权限控制和用户认证。

Flask-Admin 的设计简洁优雅,支持大部分应用场景所需的基本功能,并且允许开发者根据需求扩展和自定义后台管理界面。


标题2

📦 安装 Flask-Admin

Flask-Admin 可以通过 pip 来安装,首先确保你的 Flask 环境已经配置好,然后运行以下命令来安装 Flask-Admin:

pip install flask-admin

安装完成后,你就可以开始在 Flask 应用中使用 Flask-Admin。


标题3

♨️ 快速上手:创建一个简单的管理界面

接下来,我们将从一个简单的示例开始,展示如何使用 Flask-Admin 创建一个基本的后台管理界面。

1. 创建一个基本的 Flask 应用

首先,创建一个基本的 Flask 应用并初始化 Flask-Admin:

python">from flask import Flask
from flask_admin import Admin

app = Flask(__name__)

# 初始化 Flask-Admin
admin = Admin(app, name='示例管理后台', template_mode='bootstrap3')

if __name__ == '__main__':
    app.run(debug=True)

在这个示例中,我们初始化了一个 Flask 应用,并使用 Admin 类创建了一个名为 “示例管理后台” 的后台界面。template_mode='bootstrap3' 设置了管理界面使用 Bootstrap 3 模板样式。

运行这段代码后,访问 http://127.0.0.1:5000/admin,你将会看到一个空的管理界面,这是 Flask-Admin 的基础结构。

2. 添加数据库模型管理

在实际应用中,管理界面的核心功能通常是管理数据库模型。我们可以使用 Flask-SQLAlchemy 作为 ORM 层,并与 Flask-Admin 结合起来创建一个可以增删改查数据库记录的后台界面。

首先,我们需要安装 Flask-SQLAlchemy

pip install flask-sqlalchemy

接下来,创建一个简单的数据库模型,并将其添加到 Flask-Admin 中进行管理:

python">from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# 初始化 SQLAlchemy
db = SQLAlchemy(app)

# 定义一个数据库模型
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    email = db.Column(db.String(100))

# 创建数据库并添加表
db.create_all()

# 初始化 Flask-Admin
admin = Admin(app, name='示例管理后台', template_mode='bootstrap3')

# 添加模型视图
admin.add_view(ModelView(User, db.session))

if __name__ == '__main__':
    app.run(debug=True)

说明:

  • 我们定义了一个名为 User 的数据库模型,包含 idnameemail 三个字段。
  • db.create_all() 会在 sqlite:///app.db 中创建数据库和对应的表。
  • ModelView 类会自动为模型生成 CRUD 管理界面,并且将其添加到 Flask-Admin 的后台中。

运行该应用后,访问 http://127.0.0.1:5000/admin,你将看到 “User” 模型的管理界面。你可以在浏览器中直接创建、编辑、删除用户数据,而无需编写任何额外的代码。

3. 自定义模型视图

虽然 Flask-Admin 的默认界面已经很强大,但在很多场景中,我们可能需要定制化管理界面。通过扩展 ModelView,我们可以自定义显示的字段、验证规则以及权限控制。

隐藏敏感字段

如果我们不希望在管理界面中展示某些字段(比如用户的 ID 或密码),可以使用 column_exclude_list 属性将其隐藏:

python">class UserAdmin(ModelView):
    # 不显示 'id' 列
    column_exclude_list = ['id']

admin.add_view(UserAdmin(User, db.session))
设置只读字段

如果希望某些字段在编辑时是只读的,可以使用 form_edit_rules 设置编辑表单的规则:

python">class UserAdmin(ModelView):
    # 设置 'email' 字段为只读
    form_edit_rules = ['name', 'email']

admin.add_view(UserAdmin(User, db.session))
自定义列显示名称

我们还可以为列设置自定义显示名称,以使其在后台管理系统中更具可读性:

python">class UserAdmin(ModelView):
    # 自定义列名
    column_labels = {
        'name': '用户名',
        'email': '电子邮件'
    }

admin.add_view(UserAdmin(User, db.session))

4. 权限控制和身份认证

在大多数情况下,我们需要限制非管理员用户访问后台管理界面。Flask-Admin 可以与 Flask-Login 等扩展集成,轻松实现权限控制。

首先,安装 Flask-Login:

pip install flask-login

然后,我们可以为 Flask-Admin 添加身份认证逻辑,确保只有经过身份验证的管理员用户才能访问后台:

python">from flask import redirect, url_for
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin, LoginManager, login_user, logout_user, current_user

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
app.config['SECRET_KEY'] = 'supersecretkey'
db = SQLAlchemy(app)

# 初始化 Flask-Login
login_manager = LoginManager()
login_manager.init_app(app)

# 定义用户模型
class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    email = db.Column(db.String(100))
    is_admin = db.Column(db.Boolean, default=False)

# 创建数据库
db.create_all()

# 用户加载函数
@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))

# 自定义 ModelView,实现权限控制
class AdminModelView(ModelView):
    def is_accessible(self):
        # 只有管理员用户可以访问
        return current_user.is_authenticated and current_user.is_admin

    def inaccessible_callback(self, name, **kwargs):
        # 非管理员用户跳转到登录页面
        return redirect(url_for('login'))

# 添加到管理界面
admin = Admin(app, name='示例管理后台', template_mode='bootstrap3')
admin.add_view(AdminModelView(User, db.session))

# 简单的登录路由(仅作示例)
@app.route('/login')
def login():
    user = User.query.first()
    login_user(user)
    return '已登录为管理员'

@app.route('/logout')
def logout():
    logout_user()
    return '已退出登录'

if __name__ == '__main__':
    app.run(debug=True)

说明:

  • UserMixin 用于处理用户认证。
  • is_accessible() 方法用于检查用户是否有访问权限。只有管理员用户才能访问后台。
  • inaccessible_callback() 用于处理非授权访问的情况,用户将被重定向到登录页面。

通过这种方式,Flask-Admin 可以与 Flask-Login 无缝集成,实现完整的用户认证和权限控制逻辑。


标题4

♨️ Flask-Admin 的其他功能

除了基本的模型管理,Flask-Admin 还提供了许多高级功能,可以帮助开发者定制复杂的后台管理界面。

1. 文件上传

Flask-Admin

支持通过表单直接进行文件上传。你可以通过为模型中的 ImageFieldFileField 添加文件处理逻辑来实现文件的管理和上传。

python">from flask_admin.form import FileUploadField

class Product(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    image = db.Column(db.String(100))

class ProductAdmin(ModelView):
    form_overrides = {
        'image': FileUploadField
    }

    form_args = {
        'image': {
            'label': '产品图片',
            'base_path': '/path/to/upload/folder',
            'allow_overwrite': False
        }
    }

admin.add_view(ProductAdmin(Product, db.session))

2. 数据导出

Flask-Admin 支持将数据导出为 CSV 文件,便于管理员下载并处理数据。可以通过 can_export 参数启用数据导出功能:

python">class UserAdmin(ModelView):
    can_export = True

admin.add_view(UserAdmin(User, db.session))

标题5

📥 下载地址


Flask-Admin 最新版 下载地址


标题6

💬 结语

Flask-Admin 是一个强大且灵活的后台管理系统,能够帮助开发者快速创建功能齐全的管理界面。通过与 Flask-SQLAlchemy、Flask-Login 等库的集成,Flask-Admin 提供了自动化的模型管理、权限控制、数据导出和文件上传等功能。

无论是管理数据库记录,还是处理复杂的后台逻辑,Flask-Admin 都能提供有效的支持。通过合理的定制化和扩展,开发者可以快速构建出符合自己业务需求的管理后台。如果你正在使用 Flask 进行开发,Flask-Admin 将是一个不可或缺的工具,帮助你轻松实现高效的后台管理系统。


标题8

📒 参考文献

  • Flask-Admin 官方文档
  • Flask-Admin GitHub仓库

TheEnd


在这里插入图片描述
在这里插入图片描述


http://www.niftyadmin.cn/n/5687852.html

相关文章

李宏毅机器学习2022-HW8-Anomaly Detection

文章目录 TaskBaselineReportQuestion2 Code Link Task 异常检测Anomaly Detection 将data经过Encoder,在经过Decoder,根据输入和输出的差距来判断异常图像。training data是100000张人脸照片,testing data有大约10000张跟training data相同…

Ceph RocksDB 深度调优

介绍 调优 Ceph 可能是一项艰巨的挑战。在 Ceph、RocksDB 和 Linux 内核之间,实际上有数以千计的选项可以进行调整以提高存储性能和效率。由于涉及的复杂性,比较优的配置通常分散在博客文章或邮件列表中,但是往往都没有说明这些设置的实际作…

php email功能实现:详细步骤与配置技巧?

php email发送功能详细教程?如何使用php email服务? 无论是用户注册、密码重置,还是订单确认,电子邮件都是与用户沟通的重要手段。AokSend将详细介绍如何实现php email功能,并提供一些配置技巧,帮助你更好…

第二十三节:学习拦截器或者使用AOP实现用户token参数请求检测(自学Spring boot 3.x的第六天)

这节记录下如何使用aop或者使用interceptor实现用户请求的是否带token,本文只是简单检查用户请求是否带参数token,并不对token的正确性进行验证。通常要从后台缓存中进行token校验。 第一种方式:拦截器方式 第一步:新建一个拦截器…

33 指针与数组:数组名与指针的关系、使用指针遍历数组、数组指针、指针数组、字符指针

目录​​​​​​​ 1 数组名与指针的关系 1.1 数组名 1.2 对数组名取地址 1.3 数组名与指针的区别 1.3.1 类型不同 1.3.2 sizeof 操作符的行为不同 1.3.3 & 操作符的行为不同 1.3.4 自增自减运算的行为不同 1.3.5 可变性不同 2 使用指针遍历数组 2.1 使用 *(nu…

普通人未来还有哪些赚钱机会?

在快速发展的时代,人们对于财富的渴望从未停止。对于普通人而言,寻找合适的赚钱机会至关重要。那么,未来普通人还有哪些赚钱机会呢? 一、互联网领域的新机遇 随着科技的不断进步,互联网依然是充满无限可能的领域。 自媒…

【论文阅读】一种基于元学习框架的针对智能网络入侵检测系统的快速模型窃取攻击技术

FMSA: a meta-learning framework-based fast model stealing attack technique against intelligent network intrusion detection systems 摘要 入侵检测系统越来越多地使用机器学习。虽然机器学习在识别恶意流量方面表现出了出色的性能,但它可能会增加隐私泄露…

高并发内存池(五):ThreadCache、CentralCache和PageCache的内存回收机制、阶段性代码展示和释放内存过程的调试

目录 ThreadCache的内存回收机制 补充内容1 补充内容2 补充内容3 补充内容4 ListTooLong函数的实现 CentralCache的内存回收机制 MapObjectToSpan函数的实现 ReleaseListToSpans函数的实现 PageCache的内存回收机制 补充内容1 补充内容2 ReleaseSpanToPageCache函…