使用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 Flask

app = 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 Admin

app = 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 ModelView

app = 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 macro

class 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_user

class 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 op

path = op.join(op.dirname(__file__), 'static')

admin.add_view(FileAdmin(path, '/static/', name='Static Files'))

结语

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

常见排序算法——希尔排序

基本原理 希尔排序在插入排序的基础之上&#xff0c;将待排序序列分成组&#xff0c;分成 gap 个组&#xff0c;组的数量通过 length / 2 获得&#xff0c;比如6个元素的序列&#xff0c;那么就是 3 个组&#xff0c;每个组两个元素&#xff0c;然后将每个组的元素进行插入排…

【Web后端】servlet基本概念

1.ServletAPI架构 HttpServlet继承GenericServletGenericServlet实现了Servlet接口&#xff0c;ServletConfig接口,Serializable接口自定义Servlet继承HttpServlet 2.Servlet生命周期 第一步&#xff1a;容器加载Servlet第二步&#xff1a;调用Servlet的无参构造方法&#xf…

【程序设计和c语言-谭浩强配套】(适合专升本、考研)

一晃大半年没更新了&#xff0c;这一年一直在备考&#xff0c;想着这几天把前段时间学的c语言给大家分享一下&#xff0c;在此做了一个专栏&#xff0c;有需要的小伙伴可私信获取o。 简介&#xff1a;本专栏所有内容皆适合专升本、考研的复习资料&#xff0c;本人手上也有日常…

关于架构设计:什么是完美?

这篇不谈技术。 为什么写这篇文章&#xff1f;因为刚毕业时看一本关于软件架构设计的书&#xff0c;记得有一句关于完美的话&#xff0c;但后来无论如何都想不起来了。只记得和飞机有关。而今年在看“The Pragmatic Programmer: your journey to mastery”第2版&#xff08;20…

##13 如何在Python中优雅地使用异常处理

文章目录 引言1. 异常处理基础2. 处理多种异常3. 捕捉所有异常4. finally 语句5. 自定义异常结语参考链接 引言 在编程中&#xff0c;错误是在所难免的。Python提供了异常处理机制&#xff0c;允许程序在遇到错误时优雅地恢复。本文将介绍Python中异常处理的基本概念&#xff…

Mac YOLO V9推理测试(基于ultralytics)

环境&#xff1a; Mac M1 (MacOS Sonoma 14.3.1) Python 3.11PyTorch 2.1.2 一、准备工作 使用YOLO一般都会接触ultralytics这个框架&#xff0c;今天来试试用该框架进行YOLO V9模型的推理。 YOLOv9目前提供了四种模型下载&#xff1a;yolov9-c.pt、yolov9-e.pt、gelan-c.p…

异常处理/__LINE__ 与 __FILE__ 宏在调试和异常处理中的高级使用

文章目录 概述痛点分析_LINE_ 代码所在行号_LINE_ 直接转为字符串_LINE_ 作为整型数据使用_LINE_标记宏函数的调用位置 _FILE_ 代码所在文件名简单实验不期望 _FILE_ 宏代表全路径 assert 使用了 _FILE_ 和 _LINE_借助TLS技术小结 概述 _LINE_和_FILE_是C/C中的预定义宏&#…

【Sql-02】 求每个省份最新登陆的三条数据

SQL 输出要求数据准备sql查询结果 输出要求 要求输出&#xff0c;userid_1,logtime_1,userid_2,logtime_2,userid_3,logtime_3 数据准备 CREATE TABLE sqltest (province varchar(32) NOT NULL,userid varchar(250) DEFAULT NULL,logtime datetime ) ENGINEInnoDB DEFAULT C…

Spring框架中常见注解

Spring&#xff1a; SpringMVC&#xff1a; RequestMapping用在类上表示所有该类下方法的父路径 RequestParam 做映射&#xff0c;前端请求的参数映射到控制器Controller的处理方法上的参数上。 【当参数需要设置默认值&#xff08;前端没有发送这个参数&#xff09;、参数名…

禁止打开浏览器时弹出 internet explorer 11 停用的通知

计算机管理&#xff08;我的电脑图标上右键&#xff09; - 管理模板 - windows 组件 - internet explorer 启用隐藏 internet explorer 11 停用通知&#xff0c;如下图所示

每日算法之二叉树的最近公共祖先

题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是…

【Python特征工程系列】排列重要性法分析特征重要性-随机森林模型为例(案例+源码)

这是我的第277篇原创文章。 一、引言 排列重要性&#xff08;Permutation Importance&#xff09;是一种基于模型的方法&#xff0c;用于评估每个特征对模型性能的影响程度。该方法通过随机打乱单个特征的值并观察模型性能的变化&#xff0c;从而确定特征的重要性。如果某个特征…

模型预测控制与模糊控制 —— 潜力控制方案探讨

一、需要多少先验信息&#xff1f; 此图片来源于网络&#xff0c;所有的控制与估计过程都涉及了先验信息与后验信息之间的博弈 评估一个控制方案对先验信息的需求量大小和先验信息质量对其影响的方法涉及以下几个方面&#xff1a; 1、控制方案的理论分析&#xff1a; 详细分析…

【UE Niagara】在UI上生成粒子

效果 步骤 1. 在虚幻商城中将“Niagara UI Render”插件安装到引擎 2. 打开虚幻编辑器&#xff0c;勾选插件“Niagara UI Renderer”&#xff0c;然后重启编辑器 3. 先创建一个控件蓝图&#xff0c;该控件蓝图只包含一个按钮 这里设置尺寸框尺寸为200*50 4. 显示该控件 5. 新…

MFC中关于CMutex类的学习

MFC中关于CMutex类的学习 最近在项目中要实现两个线程之间的同步&#xff0c;MFC中提供了4个类&#xff0c;分别是CMutex(互斥量)、CCriticalSection(临界区)、CEvent(事件对象)、CSemaphore(信号量)。有关这4个类的说明&#xff0c;大家可以参考微软官方文档&#xff1a; CM…

4. 从感知机到神经网络

目录 1. 从感知机到神经网络 2. 最简单的神经网络 3. 激活函数的引入 1. 从感知机到神经网络 之前章节我们了解了感知机&#xff0c;感知机可以处理与门、非与门、或门、异或门等逻辑运算&#xff1b;不过在感知机中设定权重的工作是由人工来做的&#xff0c;而设定合适的&a…

AI算法工程师课程学习-数学基础-高数1-微积分

机器学习数学基础学习路线&#xff1a;1.高中数学-->大学2.微积分-->3.线性代数-->4.概率论-->5.优化理论。 为尽快进入到AI算法课程的学习&#xff0c;现在高数的学习要求&#xff1a; 1.看得懂&#xff0c;知道是什么&#xff0c;能听得懂&#xff0c;能理解讲…

Java框架精品项目【用于个人学习】

源码获取&#xff1a;私聊回复【项目关键字】获取 更多选题参考&#xff1a; Java练手项目 & 个人学习等选题参考 推荐菜鸟教程Java学习、Javatpoint学习 前言 大家好&#xff0c;我是二哈喇子&#xff0c;此博文整理了各种项目需求 此文下的项目用于博主自己学习&#x…

文本三剑客grep与正则表达式、元字符

正则表达式 正则表达式又称为正规表达式、常规表达式、在代码中常简写为regex、regex或RE。正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串&#xff0c;简单来说&#xff0c;是一种匹配字符串的方法&#xff0c;通过一些特殊符号&#xff0c;实现快速查…

无人播剧直播收益在哪里!快手无人播剧新秘籍:版权无忧,日入四位数攻略

无人播剧顾名思义就是通过短视频平台直播不需要真人出镜受众群体通过网络短视频平台看到的经典影视剧集可以实现24小时不停断的播放利用多种途径变现的一种直播形式 1、操作简单、不露脸、不出镜2、手机、电脑都可以操作3、可以矩阵操作4、0粉丝、0作品、0保证金就可以开播5、…