当前位置: 首页 > news >正文

【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


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

相关文章:

  • 避免glibc版本而报错,CentOS等Linux安装node.js完美方法
  • 展锐平台的手机camera 系统isptool 架构
  • 外贸电商系统卷轴模式开发:技术深度解析与实践
  • QEMU使用Qemu-Guest-Agent传输文件、执行指令等
  • 企业安全策略制定
  • 零知识证明当中Witness、Commitment 和 Proof 之间的关系
  • 可商业化的数字孪生系统
  • LeetCode 2266. 统计打字方案数
  • Apache Iceberg 数据类型参考表
  • 拉格朗日插值讲解与MATLAB例程
  • STM32——串口通信(发送/接收数据与中断函数应用)
  • 优化Mysql
  • JMX 框架
  • Python获取百度翻译的两种方法
  • C语言 | Leetcode C语言题解之第438题找到字符串中所有字母异位词
  • 分享的文章《人生如棋》
  • 【mysql】环境安装、服务启动、密码设置
  • 【个人向】《HTTP图解》阅后小结
  • 2018一半小结一波
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • CSS中外联样式表代表的含义
  • C语言笔记(第一章:C语言编程)
  • gitlab-ci配置详解(一)
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Javascript编码规范
  • Java比较器对数组,集合排序
  • Linux Process Manage
  • PHP 的 SAPI 是个什么东西
  • php面试题 汇集2
  • Promise面试题2实现异步串行执行
  • react 代码优化(一) ——事件处理
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • SQL 难点解决:记录的引用
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 初识 beanstalkd
  • 从PHP迁移至Golang - 基础篇
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 三栏布局总结
  • 物联网链路协议
  • FaaS 的简单实践
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ‌JavaScript 数据类型转换
  • #pragma once与条件编译
  • $(function(){})与(function($){....})(jQuery)的区别
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (1)Jupyter Notebook 下载及安装
  • (C11) 泛型表达式
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Java)【深基9.例1】选举学生会
  • (二)构建dubbo分布式平台-平台功能导图
  • (二)学习JVM —— 垃圾回收机制
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (转)用.Net的File控件上传文件的解决方案
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现