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

news2024/9/28 5:54:51

在这里插入图片描述

在 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:

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 中进行管理:

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 属性将其隐藏:

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

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

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

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

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

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

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 添加身份认证逻辑,确保只有经过身份验证的管理员用户才能访问后台:

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 添加文件处理逻辑来实现文件的管理和上传。

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 参数启用数据导出功能:

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.coloradmin.cn/o/2172568.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【移植】轻量系统STM32F407芯片移植案例

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 介绍基于 STM32F407IGT6 芯片在拓维信息 Niobe407 开发板上移植 Op…

Linux操作系统中MongoDB

1、什么是MongoDB 1、非关系型数据库 NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问…

改变安全策略的五大实践

随着网络威胁形势的加剧,网络安全计划必须不断发展以保护组织的使命。 为了管理这种持续的网络安全发展,应遵循五项关键的安全计划变更管理实践: 1. 识别并吸引受安全风险影响的业务利益相关者 随着新的网络安全风险被发现,受影…

HEITRONICS TC13红外辐射高温计CT13 INFRARED RADIATION PYROMETER CT13

HEITRONICS TC13红外辐射高温计CT13 INFRARED RADIATION PYROMETER CT13

山海优选电商平台卷轴模式订单系统核心架构解析

山海优选卷轴模式的订单核心源码是涉及订单处理、支付、搜索、状态管理等关键功能的代码部分。由于直接提供完整的源代码可能涉及版权和隐私保护问题,我将基于参考文章中的信息,概述该模式订单核心源码的主要结构和功能点。 一、订单核心源码概述 在山海…

IDEA2020运行项目时不从配置的maven仓库找jar包,从C盘默认路径下找jar包

目录 问题描述: 解决方案: 问题描述: 使用IDEA2020做java开发,idea的设置中maven仓库地址配在D盘, maven的配置文件setting.xml中的仓库也已经确认配置到D盘, 项目根据pom文件自动下载jar包时也会下载到…

【Python快速学习笔记01】下载解释器/环境变量配置/PyCharm下载/第一个代码

目录 1.下载python解释器 2.第一个python程序 3.配置解释器环境变量 4.下载开发工具 PyCharm 4.通过PyCharm编写第一个python程序 1.下载python解释器 官网下载,但是下载太慢了,所以直接百度搜了下载了个 Welcome to Python.org 1.官网下载 2.直…

深度伪造语音检测(Deepfake Speech Detection, DSD)全面概述

近期,深度学习技术和神经网络在生成型人工智能领域已取得重大突破。如今,关键的通信媒介,如音频、图像、视频和文本,均能实现自动生成,并广泛应用于诸多领域,包括聊天机器人系统(如ChatGPT&…

大数据新视界 --大数据大厂之数据压缩算法比较与应用:节省存储空间

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

基于Python实现的国庆节庆祝小程序

祖国母亲即将迎来75周年华诞,在这个特殊的日子里,我们可以用编程的方式来表达对祖国的祝福。本文将使用Python编写一个简单的国庆节庆祝小程序,通过一些编程技巧和设计为国庆节增添一些程序员的特色。 ⭕️庆祝国庆 ⭐️ 程序设计思路&#x…

Netty 与 WebSocket之间的关系

WebSocketProtocolHandler 和 Netty 在处理 WebSocket 连接时扮演不同的角色,但它们通常是一起使用的,尤其是在基于 Netty 的项目中。为了更好地理解它们之间的区别,我们首先需要了解 WebSocket 和 Netty 的基本概念。 WebSocket WebSocket…

超好用的可视化工具!一键生成影响因素森林图,文章增色好帮手!

森林图目前在相关文献中可以说是非常常见了,不只是亚组分析中,普通的回归分析结果也可以用森林图进行可视化展示,不仅可以帮助我们更好地理解不同变量间的一致性和差异性,新颖的图片还能为文章增色不少。 当下主流绘制森林图的方式…

linux蓝屏重启解决方法汇总

前言 linux系统蓝屏(Blue Screen Of Death)是Linux系统用户遇到最严重的故障,任何新手都无法直接解决它。在遇到蓝屏时,最好的解决方案是联系Linux专业供应商或Linux专业支持工程师,因为他们有系统的协议和经验来解决…

手机如何五开玩梦幻西游端游?用GameViewer远程手机免费畅玩梦幻西游

用手机就能免费玩梦幻西游端游,还可以随时查看挂机进度! 想要实现这一点,就用网易GameViewer远程,而且不光手机可以玩梦幻西游端游,平板也能免费玩,并为你实现五开玩梦幻西游端游。 那么,通过Ga…

事后被动处置向事前主动预警转变的智慧工业开源了

智慧工业视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上…

【逐梦旅程】Windows游戏开发笔记

前言 伴随着最近黑神话悟空大火,游戏开发也引起了我的关注。我相信每一个程序员都有一个开发游戏的梦,遗憾的是我的职业路径似乎与这个梦想越来越远了。但是也没关系,我收藏过一本游戏开发的书籍,正好趁现在工作不忙,…

C# 相等性检测方法差异分析(==,Equals,ReferenceEquals)

先给结论: 对于每种类型创建2个一样的数据,比较结果如下表所示: 数据类型EqualsReferenceEqualsint(值类型)√√引用类型引用类型(带override)以operator 实现为准以Equals覆写为准struct必须实现操作符√struct&…

【BurpSuite】访问控制漏洞和权限提升 | Access control vulnerabilities (3-6)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍收藏💗支持一下哦 【BurpSuite】访问控制漏洞和权限提升 | Access control vulnerabilities (3-6) 实验三 Lab: User role controlled b…

【高频SQL基础50题】6-10

目录 1.上级经理已离职的公司员工 2.修复表中的名字 3. 寻找用户推荐人 4.产品销售分析 I 5.平均售价 1.上级经理已离职的公司员工 子查询。 先根据薪水大小查询,再根据manager_id查询该员工是否存在,最后做排序。 # Write your MySQL query st…

ValueError: Out of range float values are not JSON compliant

可能原因一 可能原因二 数据里面有NaN