背景

作为SRE,我们有很多很多自动化的工具,大部分都是自动运行的,还有一部分是CLI,我们一直苦于没有一个自己的管理后台网站,受限于前端能力薄弱,开发出来的网页只能说凑活能用,但是不好用。

现在我们有了Streamlit这个神奇,可以仅使用Python就开发一个简单的后台管理网站,同时也可以作为我们的内容输出渠道。

简介

官网:https://streamlit.io/

本身streamlit是给做机器学习的人开发的,作为一个实时的数据展示和输出工具,但是自从我们发现它具有一些交互功能(Form表单,按钮,单选框,复选框)等功能后,我们借助这些特性,可以开发一个管理网站。

官方Demo

首先安装库:pip3 install streamlit

运行自带的demo:命令行或者CMD输入:streamlit hello

打开网页即可看到Demo

我们的Demo:一个简易的运维管理网站后台

先上截图:

首页

项目管理

用户管理

权限管理

这里只是写了几个demo的功能,每家公司的业务需求不一样,需要根据自己公司实际情况,修改代码

直接上源代码

需要的解析都已经写在代码注释里了,这里就不展开说了。

import streamlit as st
import time
# 设置网页标题,以及使用宽屏模式
st.set_page_config(
page_title="运维管理后台",
layout="wide" )
# 隐藏右边的菜单以及页脚
hide_streamlit_style = """
<style>
#MainMenu {visibility: hidden;}
footer {visibility: hidden;}
</style>
"""
st.markdown(hide_streamlit_style, unsafe_allow_html=True)
# 左边导航栏
sidebar = st.sidebar.radio(
"导航栏",
("首页", "项目管理", "用户管理", "权限管理")
)
if sidebar == "项目管理":
st.title("项目管理")
# 项目选择框
project_name = st.selectbox(
"请选择项目",
["项目A", "项目B"]
)
if project_name:
# 表单
with st.form(project_name):
project_info_1 = st.text_input("项目信息1", project_name)
project_info_2 = st.text_input("项目信息2", project_name)
project_info_3 = st.text_input("项目信息3", project_name)
submitted = st.form_submit_button("提交")
if submitted:
# 在这里添加真实的业务逻辑
# 这是一个进度条
bar = st.progress(0)
for i in range(100):
time.sleep(0.01)
bar.progress(i)
st.write("项目信息1:%s, 项目信息2:%s, 项目信息3:%s" % (project_info_1, project_info_2, project_info_3))
st.success("提交成功") elif sidebar == "用户管理":
st.title("用户管理")
# 将页面分为左半边和右半边
left, right = st.beta_columns(2)
# 左半边页面展示部分
with left:
st.header("查看、更新用户信息")
user_name = st.selectbox(
"请选择用户",
["郑立赛", "乔布斯", "王大拿"]
)
if user_name:
with st.form(user_name):
phone_num = st.text_input("手机号", user_name)
role = st.multiselect(
"用户角色",
["大神", "大拿"],
["大神"]
)
user_group = st.multiselect(
"请选择用户组",
["大神组", "大拿组"],
["大神组"]
)
submitted = st.form_submit_button("提交")
if submitted:
# 这里添加真实的业务逻辑
st.write("用户名:%s, 手机号:%s, 用户角色:%s, 用户组:%s" % (user_name, phone_num, role, user_group))
st.success("提交成功")
# 右半边页面展示部分
with right:
st.header("添加、删除用户")
user_action = st.selectbox(
"请选择操作",
["添加用户", "删除用户"]
)
if user_action:
with st.form(user_action):
if user_action == "添加用户":
phone_num = st.text_input("手机号", user_name)
role = st.multiselect(
"用户角色",
["大神", "大拿"]
)
user_group = st.multiselect(
"请选择用户组",
["大神组", "大拿组"]
)
submitted = st.form_submit_button("提交")
if submitted:
# 请在这里添加真实业务逻辑,或者单独写一个业务逻辑函数
st.write("user_name:%s, phone_num:%s, role:%s, user_group:%s" % (user_name, phone_num, role, user_group))
st.success("提交成功")
else:
user_group = st.multiselect(
"请选择要删除的用户",
["郑立赛", "乔布斯", "王大拿"]
)
submitted = st.form_submit_button("提交")
if submitted:
# 请在这里添加真实业务逻辑,或者单独写一个业务逻辑函数
st.write("user_name:%s, phone_num:%s, role:%s, user_group:%s" % (user_name, phone_num, role, user_group))
st.success("提交成功")
elif sidebar == "权限管理":
st.title("权限管理")
with st.form("auth"):
user = st.multiselect(
"选择用户",
["郑立赛", "乔布斯", "王大拿"]
)
role = st.multiselect(
"选择用户角色",
["大神", "大拿"]
)
user_group = st.multiselect(
"请选择用户组",
["大神组", "大拿组"]
)
submitted = st.form_submit_button("提交")
if submitted:
# 请在这里添加真实业务逻辑,或者单独写一个业务逻辑函数
st.write(
"用户:%s, 角色:%s, 用户组:%s" % (user, role, user_group))
st.success("提交成功")
else:
st.title("运维管理后台")
st.write("欢迎使用运维管理后台")

如果是windows直接在CMD输入,假设你把上面的代码保存为demo.py

streamlit run demo.py

打开浏览器即可看到上面的截图

安全性

Web类型程序一定避不开安全性的问题,Streamlit不支持安全认证

即不提供用户名密码等基本的认证方式,查了官方的论坛,目前没有好的办法,官方后续有计划做,但是也是在For Team版本里面,开源版是不提供的。

解决办法:在程序前面加上一个nginx,利用nginx的basic_auth做认证,然后将请求转发给streamlit。这应该是最简单的办法了。

附录

开发者文档

https://docs.streamlit.io/en/stable/api.html

【Python】神器:Streamlit,仅使用Python开发一个运维管理后台(不需要编写html,js,css)的更多相关文章

  1. 探索 Python、机器学习和 NLTK 库 开发一个应用程序,使用 Python、NLTK 和机器学习对 RSS 提要进行分类

    挑战:使用机器学习对 RSS 提要进行分类 最近,我接到一项任务,要求为客户创建一个 RSS 提要分类子系统.目标是读取几十个甚至几百个 RSS 提要,将它们的许多文章自动分类到几十个预定义的主题领域 ...

  2. 推荐一款Python神器,5 行 Python 代码 实现一键批量扣图

    今天给大家分享一款Python装逼实用神器. 在日常生活或者工作中,经常会遇到想将某张照片中的人物抠出来,然后拼接到其他图片上去.专业点的人可以使用 PhotoShop 的"魔棒" ...

  3. 9.python 系统批量运维管理器之Fabric模块

    前面介绍了paramiko,pexpect模块,今天来说比较适合大型应用自动化部署的模块,或者执行系统命令的模块Fabric. Fabric 是一个 Python 的库,同时它也是一个命令行工具.它提 ...

  4. 8.python 系统批量运维管理器之pexpect模块

    小插曲 前几节讲了paramiko模块,但是pexpect模块的功能几乎跟paramiko一样,先来分析一下: 1.各自介绍 pexpect是一个通过启动子程序,使用正则表达式对程序输出做出特定响应, ...

  5. 4.python 系统批量运维管理器之paramiko模块

    paramiko paramiko是ssh服务最经常使用的模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. paramiko实现ssh2不外乎两个角度:SSH客户端与服务端 SS ...

  6. 如何快速开发一个支持高效、高并发的分布式ID生成器

    ID生成器是指能产生不重复ID服务的程序,在后台开发过程中,尤其是分布式服务.微服务程序开发过程中,经常会用到,例如,为用户的每个请求产生一个唯一ID.为每个消息产生一个ID等等,ID生成器也是进行无 ...

  7. python 开发一个支持多用户在线的FTP

    ### 作者介绍:* author:lzl### 博客地址:* http://www.cnblogs.com/lianzhilei/p/5813986.html### 功能实现 作业:开发一个支持多用 ...

  8. python(3.x)自动化全栈开发100天集训计划(跟上进度,到一个新高度)——day1

            Day1 目录: Python介绍 * 了解Python的特点.发展史 * 介绍Python广泛的应用领域和前景 第一个Python程序 * 掌握Python代码的2种执行方式 变量 ...

  9. Python之路,Day18 - 开发一个WEB聊天来撩妹吧

    Python之路,Day18 - 开发一个WEB聊天来撩妹吧   本节内容: 项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个 ...

随机推荐

  1. Java程序设计基础第4章习题与自总

    怎么说呢?不论什么编程题,都有很多种方法解决问题,最后能解决我们所提出的问题才是关键的东西,也是未来成为工程师所需要的能力.解决问题是关键, 当我们做好了问题解决的关键途径的时候,如果有着profou ...

  2. 2021 年最值得推荐的 7 个 Angular 前端组件库 - DevUI

    摘要:DevUI 是一款面向企业中后台产品的开源前端解决方案,它倡导沉浸.灵活.至简的设计价值观,提倡设计者为真实的需求服务,为多数人的设计,拒绝哗众取宠.取悦眼球的设计.如果你正在开发 ToB 的工 ...

  3. nodejs安装cnpm、nrm、webpack

    nodejs更换npm默认安装路径 查看包路径 npm config ls NPM默认的管理包路径在C:/用户/[用户名]/AppData/Roming/npm/node_modules,为了方便对依 ...

  4. 把握好集成测试大关,ERP就成功了一大半

    欢迎关注微信公众号:sap_gui (ERP咨询顾问之家) 前段时间收到一个朋友的信息,说他们目前正在实施ERP系统,已经到了集成测试环节了,但整个测试过程下来并不是太理想,很多接口不通,功能也还在开 ...

  5. 反调试——Windows异常-SEH

    反调试--Windows异常-SEH 概念: SEH:Structured Exception Handling SEH是Windows默认的异常处理机制 如何使用 在代码中使用 __try​​__e ...

  6. php读取目录下的所有文件

    php读取目录下的所有文件 $path = './use'; $result = scanFile($path); function scanFile($path) { global $result; ...

  7. POJ3040给奶牛发工资

    题意:       有n种硬币,每种硬币有mi个,然后让你给奶牛发工资,每周发至少c元(就是不找零钱的意思)然后问你能发几周?(硬币之间都是倍数关系) 思路:       这个题目做了两天,丢脸,看完 ...

  8. POJ2060最小路径覆盖

    题意:       有n个任务,如果时间来得及干完某些任务后还可以接着干别的任务,给一个任务清单,问最少派出去多少人能完成所有任务. 思路:        比较简单的追小路径覆盖问题了,在DAG中找到 ...

  9. CVE-2018-8174(双杀漏洞)复现

    目录 CVE-2018-8174双杀漏洞复现一(不稳定) 下载payload MSF监听 CVE-2018-8174双杀漏洞复现二

  10. Portswigger web security academy:Reflected XSS

    Portswigger web security academy:Reflected XSS 目录 Portswigger web security academy:Reflected XSS Ref ...