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

在这里插入图片描述

在 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 Adminapp = 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 ModelViewapp = 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_userapp = 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_admindef 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 FileUploadFieldclass 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 = Trueadmin.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.xdnf.cn/news/1548770.html

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

相关文章

防盗智能电子锁的使用

一、防盗智能电子锁的介绍 以宏泰HONGTAI的DJ08产品为例。 功能: 自动补锁、开锁并智能纠正人为错误操作行为;开启方式有门禁电控、钥匙、旋钮等;开门方向,左右、内外通用;带信号反馈,开锁声光提示&#…

数据结构:树的定义及其性质

树的定义 树是一种重要的非线性数据结构,树作为一种逻辑结构,同时也是一种分层结构。具有以下两个特点: 1.树的根结点没有前驱,除根结点意外的节点只有一个前驱 2.树中所有结点都可以有0个或多个后继 树结构在多个领域都有广泛…

【Python】字典 文件操作 生成二维码 多媒体操作

目录 字典 创建字典 查找key 新增键值对 修改键值对 删除键值对 遍历键值对 keys() values() items() 合法的key类型 文件 文件是什么 打开文件 关闭文件 写文件 读文件 *上下文管理器 实现文件查找工具 pip包管理器 生成二维码 安装第三方库 生成二维…

MySql在更新操作时引入“两阶段提交”的必要性

日志模块有两个redo log和binlog,redo log 是引擎层的日志(负责存储相关的事),binlog是在Server层,主要做MySQL共嗯那个层面的事情。redo log就像一个缓冲区,可以让当更新操作的时候先放redo log中&#xf…

2024.9.24 作业

My_string类中的所有能重载的运算符全部进行重载、[] 、>、、>) 仿照stack类实现my_stack,实现一个栈的操作 #include <iostream> #include <cstring>using namespace std;class My_string{ private:char *ptr;int size;int len;public://无参构造My_strin…

Miniforge详细安装教程(macOs和Windows)

(注&#xff1a;主要是解决商业应用anaconda收费问题&#xff0c;这是轻量级的代替&#xff0c;个人完全可以使用anaconda和miniconda) Miniforge 是一个轻量级的包管理器&#xff0c;类似于 Anaconda 和 Miniconda。它主要用于安装基于 conda 的 Python 环境&#xff0c;专注于…

IPEmotion 2024 R2现支持Amazon S3和Windows SMB服务器

新版IPEmotion 2024 R2软件推出了许多新功能&#xff0c;其中的一大功能是支持Amazon S3、Windows SMB服务器以及新的IPE-CAM-007 USB摄像头。IPEmotion 2024 R2还支持直接写入TEDS数据和配置可装载电池的新款IPE833记录仪。 — 创新成果一览 — ■ 支持Amazon S3、Windows SM…

IDEA 系列产品 下载

准备工作 下载 下载链接&#xff1a;https://www.123865.com/ps/EF7OTd-mbHnH 仅供参考 环境 演示环境&#xff1a; 操作系统&#xff1a;windows10 产品&#xff1a;IntelliJ IDEA 版本&#xff1a;2024.1.2 注意&#xff1a;如果需要其他产品或者版本可以自行下载&#xff0…

虚幻引擎UE5如何云渲染,教程来了

​步骤一&#xff1a;获取云渲染权限 访问渲染101官网&#xff0c;使用云渲码6666进行注册。 下载并安装渲染客户端。 步骤二&#xff1a;设置渲染环境 确保云渲染环境与您的本地环境一致&#xff0c;避免出错。 步骤三&#xff1a;任务提交 完成环境配置后&#xff0c;解析…

【LeetCode】每日一题 2024_9_27 每种字符至少取 K 个(双指针)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 题目&#xff1a;每种字符至少取 K 个 代码与解题思路 func takeCharacters(s string, k int) int {// 核心思路&#xff1a;// 题目要求字符串 s 中&#xff0c;每种字符都取至少 k 个// 而且可以从头取…

腾讯一面-LRU缓存

为了设计一个满足LRU&#xff08;最近最少使用&#xff09;缓存约束的数据结构&#xff0c;我们可以使用哈希表&#xff08;HashMap&#xff09;来存储键值对&#xff0c;以便在O(1)时间复杂度内访问任意键。同时&#xff0c;我们还需要一个双向链表&#xff08;Doubly Linked …

excel统计分析(3): 一元线性回归分析

简介 用途&#xff1a;研究两个具有线性关系的变量之间的关系。 一元线性回归分析模型&#xff1a; ab参数由公式可得&#xff1a; 判定系数R2&#xff1a;评估回归模型的拟合效果。值越接近1&#xff0c;说明拟合效果越好&#xff1b;值越接近0&#xff0c;说明拟合效果越…

DC00020基于springboot新闻网站系统java web项目MySQL新闻管理系统

1、项目功能演示 DC00020基于springboot新闻网站系统java web项目MySQL 2、项目功能描述 基于springbootvue新闻网站包括用户和系统管理员两个角色。 2.1 用户功能 1、用户登录、用户注册 2、新闻信息&#xff1a;点赞、点踩、收藏、查看 3、用户分享&#xff1a;点赞、点踩…

一键降重:芝士AI如何简化论文查重过程?

大家写论文时“旁征博引”是常规操作&#xff0c;所以重复率就成了投稿前的“噩梦”。自己降重&#xff0c;发现怎么改写都无法下降重复率&#xff0c;可能一天改下来下降3%&#xff0c;让人抓狂。 但今天开始&#xff0c;你不用再苦恼啦&#xff0c;更不用自己抓耳挠腮一整天…

【计算机网络 - 基础问题】每日 3 题(二十七)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

使用FFmpeg压缩MP3格式音频

FFmpeg简介 FFmpeg 是一个开源的多媒体框架&#xff0c;能够录制、转换数字音频和视频&#xff0c;并将其转码到流行的格式。它被广泛应用于音视频处理领域&#xff0c;支持几乎所有的音视频格式和编解码器。以下是 FFmpeg 的一些关键特点和功能&#xff1a; 主要特点 跨平台…

微服务Redis解析部署使用全流程

1、什么是Redis Redis&#xff08;Remote Dictionary Server &#xff09;&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 可以理解成一个大容量的map。…

PCI数据采集卡500K频率32路模拟量采集 DIO各16路 DAQ卡——PCI8735

品牌&#xff1a;阿尔泰科技 型号&#xff1a;PCI8735 概述&#xff1a; 产品应用&#xff1a; 板卡图片&#xff1a; 指标参数&#xff1a; 模拟量输入 通道数 单端32路/差分16路 精度 12位 采样频率 500KHz 通道切换方式 首末通道顺序切换 AD量程 10V&#xff0c;5V&#x…

Mbox物联网关:驱动工业数据汇聚与智能处理的核心引擎

在数字化转型的汹涌浪潮中&#xff0c;Mbox物联网关作为工业物联网领域的佼佼者&#xff0c;正引领着制造业向智能化、高效化方向迈进&#xff0c;深刻重塑着传统工业的生产生态与效率边界。作为连接物理世界与数字世界的智能桥梁&#xff0c;明达技术自主研发的Mbox物联网关在…

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

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