使用Flask-Admin创建强大的后台管理系统

文章目录

      • 安装Flask-Admin
      • 创建Flask应用
      • 添加Flask-Admin
      • 添加模型
      • 扩展延伸
        • 自定义视图
        • 权限管理
        • 文件上传
      • 结语

在Web应用开发中,后台管理系统是至关重要的组成部分,它能够让管理员轻松管理应用的各种数据和配置。Flask-Admin是一个功能强大的Flask扩展,可以帮助我们快速构建灵活、易于定制的后台管理界面。本文将介绍如何使用Flask-Admin创建一个强大的后台管理系统,并展示一些常用功能的实现。
在这里插入图片描述

安装Flask-Admin

首先,我们需要安装Flask-Admin。可以使用pip来安装:

pip install Flask-Admin

创建Flask应用

在创建Flask应用之前,确保已经安装了Flask:

pip install Flask

接下来,创建一个简单的Flask应用:

from flask import Flaskapp = Flask(__name__)@app.route('/')
def index():return 'Hello, Flask-Admin!'if __name__ == '__main__':app.run(debug=True)

保存为app.py,然后运行应用:

python app.py

现在,打开浏览器访问http://localhost:5000,应该可以看到"Hello, Flask-Admin!"的页面。

添加Flask-Admin

现在,我们将添加Flask-Admin到我们的应用中。修改app.py文件:

from flask import Flask
from flask_admin import Adminapp = Flask(__name__)
admin = Admin(app, name='My Admin', template_mode='bootstrap3')@app.route('/')
def index():return 'Hello, Flask-Admin!'if __name__ == '__main__':app.run(debug=True)

现在,重新运行应用,访问http://localhost:5000/admin,你应该能够看到Flask-Admin的管理界面。

添加模型

接下来,我们将添加一个简单的模型到Flask-Admin中。假设我们有一个名为User的模型,包含idusername字段。首先,安装SQLAlchemy:

pip install SQLAlchemy

然后,修改app.py文件:

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'
db = SQLAlchemy(app)
admin = Admin(app, name='My Admin', template_mode='bootstrap3')class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True, nullable=False)admin.add_view(ModelView(User, db.session))@app.route('/')
def index():return 'Hello, Flask-Admin!'if __name__ == '__main__':db.create_all()app.run(debug=True)

这样,我们就将User模型添加到了Flask-Admin中,并可以在管理界面中进行增删改查操作。

扩展延伸

通过Flask-Admin,我们可以轻松地创建强大的后台管理系统,管理应用的各种数据和配置。除了上面介绍的功能之外,Flask-Admin还支持自定义视图、权限管理、文件上传等功能,可以根据实际需求进行定制。

当使用Flask-Admin构建后台管理系统时,除了基本的增删改查功能之外,还可以通过一些高级功能来进一步提升系统的灵活性和易用性。

自定义视图

Flask-Admin允许开发者自定义视图,以满足特定需求。通过自定义视图,可以实现更复杂的数据展示和操作逻辑。比如,可以创建一个自定义视图来展示统计信息、图表数据或者复杂的数据关联关系。

from flask_admin.contrib.sqla import ModelView
from flask_admin.model.template import macroclass CustomUserView(ModelView):column_list = ('id', 'username', 'email')column_searchable_list = ('username', 'email')column_extra_row_actions = [LinkRowAction('glyphicon glyphicon-user', 'user_details', tooltip='User details'),]column_formatters = dict(username=macro('render_username'))def render_username(view, context, model, name):return Markup(f'<a href="/user/{model.id}">{model.username}</a>')
权限管理

在实际应用中,通常需要对不同角色的用户进行权限管理。Flask-Admin提供了灵活的权限管理功能,可以根据用户角色来控制其对数据和功能的访问权限。可以通过自定义的方式来定义不同角色的权限,并将其应用到相应的视图中。

from flask_admin import AdminIndexView, expose
from flask_login import current_userclass MyAdminIndexView(AdminIndexView):@expose('/')def index(self):if not current_user.is_authenticated or not current_user.has_role('admin'):return self.render('admin/forbidden.html')return super(MyAdminIndexView, self).index()
文件上传

在后台管理系统中,经常需要支持文件上传功能。Flask-Admin提供了方便的文件上传功能,可以通过简单的配置实现文件的上传和管理。可以结合第三方存储服务,如Amazon S3或者七牛云,来存储上传的文件,并在管理界面中进行管理。

from flask_admin.contrib.fileadmin import FileAdmin
import os.path as oppath = op.join(op.dirname(__file__), 'static')admin.add_view(FileAdmin(path, '/static/', name='Static Files'))

结语

通过上述扩展功能,我们可以更加灵活地定制后台管理系统,满足不同应用的需求。无论是简单的数据管理还是复杂的业务逻辑,Flask-Admin都能够提供强大的支持,让开发者可以更专注于业务逻辑的实现,而不用过多关注管理界面的实现细节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1420050.html

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

相关文章

【DevOps】Linux 安全:iptables 组成、命令及应用场景详解

导读&#xff1a;全面掌握 iptables&#xff1a;从基础到实践 在 Linux 系统中&#xff0c;iptables 是一个非常强大的工具&#xff0c;它不仅是系统管理员用来构建和管理网络防火墙的首选工具&#xff0c;而且也是一个功能丰富的网络流量处理系统。无论是进行包过滤、监控网络…

ROS 2边学边练(46)-- 给URDF模型添加物理属性和碰撞属性

前言 实际物理世界中的物体需要遵守物理定律&#xff0c;机器人也不例外&#xff0c;在urdf中我们同样可以给机器人添加相关属性以模拟对应真实物理世界中的情况。 动动手 碰撞collision 碰撞属性指的是该物体的最小安全物理空间&#xff0c;站在机器人的角度&#xff0c;这个…

UE5C++ FString做为参数取值时报错error:C4840

问题描述 用来取FString类型的变量时报错&#xff1a; 问题解决 点击错误位置&#xff0c;跳转到代码&#xff1a; void AMyDelegateActor::TwoParamDelegateFunc(int32 param1, FString param2) {UE_LOG(LogTemp, Warning, TEXT("Two Param1:%d Param2:%s"), param…

docker搭建redis6.0(docker rundocker compose演示)

文章讲了&#xff1a;docker下搭建redis6.0.20遇到一些问题&#xff0c;以及解决后的最佳实践方案 文章实现了&#xff1a; docker run搭建redisdocker compose搭建redis 搭建一个redis’的过程中遇到很多问题&#xff0c;先简单说一下搭建的顺序 找一个redis.conf文件&…

spsr 的恢复出错,导致 thumb 指令集的 it 条件运行指令运行异常,清晰的调试思路帮助快速解决问题

记一次调试过程 这是一个在 arm 架构上的 RTOS 上的调试过程。问题现象为使用 thumb 指令集的 libgcc 库的情况下&#xff0c;浮点运算随机出错。经过一番追踪调试&#xff0c;逐步缩小问题范围&#xff0c;最后定位问题&#xff0c;成功解决。 场景 在某款的国产 RTOS 上&a…

RIP动态路由协议详解

目录 一&#xff1a;RIP协议的基本信息 二&#xff1a;RIP协议中的更新方式 三&#xff1a;RIP协议中的计时器 定时更新器&#xff08;UPDATE timer&#xff09; 无效定时器&#xff08;invalid Timer&#xff09; 垃圾收集定时器&#xff08;garbage collection timer&a…

【退役之重学 Java】初步认识 AQS

一、AQS 是什么 Abstract Queued Synchronizer &#xff0c;翻译过来就是“抽象的排好队的同步器”。 AQS 是一个用来构建锁和同步器的框架。是用来构建锁或者其他同步器组件的重量级基础框架及整个JUC体系的基石&#xff0c;通过内置的FIFO队列来完成线程获取资源的排队工作&…

【linux软件基础知识】如何使用 run_list 字段将任务放入就绪队列中

在给定的代码片段中,struct task_struct 表示内核中任务或进程的进程控制块 (PCB)。 run_list 字段的类型为 struct list_head,这表明它是链表实现的一部分。 run_list字段在Linux内核中常用来表示任务在调度队列中的位置,例如就绪队列或各种优先级队列。 init_task是一个…

第100+7步 ChatGPT文献复现:ARIMA-GRNN预测出血热

基于WIN10的64位系统演示 一、写在前面 这一次&#xff0c;我们来解读ARIMA-GRNN组合模型文章&#xff0c;也是老文章了&#xff1a; 《PLoS One》杂志的2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal…

树莓派、ubuntu低版本python3安装库

如果遇到树莓派中自带低版本python3&#xff0c;又不想额外去安装python3时&#xff0c;可能会遇到版本过低&#xff0c;无法安装库的情况&#xff0c;以下用我实际情况举例解决方案。 本次遇到的问题是树莓派低版本中&#xff0c;python3为3.7.3&#xff0c;需要安装numpy&am…

基于STC12C5A60S2系列1T 8051单片机实现一主单片机与一从单片机进行双向串口通信功能

基于STC12C5A60S2系列1T 8051单片机实现一主单片机与一从单片机进行双向串口通信功能 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功能寄存器…

数据结构与算法===递归

文章目录 定义适用场景爬楼梯代码实现 小结 定义 递归(Recursion)是指函数的自身调用。 这个算法演变为了程序员之间的梗&#xff0c;所表达的意思近似于“套娃”&#xff0c;表示不断重复引用别人的话从而产生循环。 适用场景 这个应该很多的&#xff0c;像一些树的遍历&am…

Java | Leetcode Java题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; class Solution {public int largestRectangleArea(int[] heights) {int n heights.length;int[] left new int[n];int[] right new int[n];Arrays.fill(right, n);Deque<Integer> mono_stack new ArrayDeque<Integer>();f…

数据结构与算法学习笔记三---队列的顺序表示和实现(C语言)

目录 前言 1.顺序队列的描述 2.队列的顺序表示和实现 1.定义 2.初始化 3.销毁 4.清空 5.空队列 6.队列长度 7.获取队头 8.入队 9.出队 10.遍历队列 11.完整代码 前言 本篇博客介绍栈和队列的表示和实现。 1.顺序队列的描述 图1.顺序队列的描述 2.队列的顺序表示…

如何根据招聘信息打造完美简历

如何根据招聘信息打造完美简历 招聘信息分析简历调整策略个性化与关键词结语 在求职过程中&#xff0c;简历是第一块敲门砖。它不仅展示了你的专业技能和工作经验&#xff0c;还体现了你对所申请职位的理解和热情。然而&#xff0c;如何从招聘信息中提炼关键点&#xff0c;打造…

苹果电脑MAC清理系统空间工具CleanMyMacX4.15.3中文版下载

苹果电脑以其出色的性能、优雅的设计和高效的操作系统而受到许多用户的喜爱。然而&#xff0c;随着时间的推移和使用量的增加&#xff0c;你可能会发现你的Mac开始变得缓慢和响应迟缓。这通常是因为硬盘空间被大量占用&#xff0c;影响了系统的整体性能。幸运的是&#xff0c;有…

mysql管理

数据库服务管理 安装完成后,启动mysql服务器systemctl start mysqld然后查看mysql状态systemctl status mysqld 发现报错&#xff0c;因为centos不再支持MySQL数据库&#xff0c;安装mariadb代替 yum install –y mariadb-server 会在 /var/log/mysqld.log文件中会自动生成…

Android 13 系统自定义安全水印

效果 源码实现 frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java public final void showSafeModeOverlay() {View v LayoutInflater.from(mContext).inflate(com.android.internal.R.layout.safe_mode, null);WindowManager.Layout…

CSS滑动门

CSS滑动门使各种特殊形状的背景能够自动拉伸滑动&#xff0c;以适应元素内部的文本内容&#xff0c;其原理是&#xff1a;利用CSS精灵和盒子撑开宽度适应不同字数的导航栏。 特点&#xff1a; 1.可以根据导航字数自动调节宽度&#xff1b; 2.可以以简单的背景图实现炫彩的导航条…

NSS题目练习2

[LitCTF 2023]我Flag呢&#xff1f; 打开题目后查看源码即可发现flag [第五空间 2021]WebFTP 看到提示&#xff0c;首先想到用dirsearch扫描链接&#xff0c;看是否存在git泄露 发现存在git泄露&#xff0c;用githack解决 克隆提示目录为空&#xff0c;说明不正确&#xff0c…