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

在这里插入图片描述

背景

作为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。这应该是最简单的办法了。


最后:凡事要趁早,特别是技术行业,一定要提升技术功底。

其实每个程序员也能意识到目前自己面临的窘境,但能够及时作出改变,顺应时代变化的人太少了。毕竟更多人的情况是,忙着上班,也没人引路,自己也不太会规划。多数人明明“泰山崩于前,而面色如土”只能眼睁睁看着自己被行业淘汰吗?

在这里插入图片描述
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

关注我的微信公众号:【伤心的辣条】免费获取~

我的软件测试学习交流群:902061117 群里有技术大牛一起交流分享~

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

好文推荐:

35岁之后软件测试工程师靠什么养家?我能继续做测试!

App公共测试用例梳理

Python简单?先来40道基础面试题测试下

阿里二黑叹息:越来越多的年轻人从职场撤退了?

从一名开发人员转做测试的一些感悟

  • 8
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,我可以为您提供一个简单的运维管理系统的Python代码框架,该系统包括以下功能: 1. 系统监控:监控系统状态,包括CPU、内存、磁盘等资源的使用情况。 2. 日志管理:实现日志收集、存储、查询和分析功能,方便运维人员进行故障排查和系统优化。 3. 配置管理:实现系统配置的管理,包括环境变量、应用程序配置等。 4. 任务调度:实现定时任务的调度和执行,方便自动化运维。 以下是一个简单的Python代码框架,供您参考: ``` import psutil # 这是一个第三方库,用于获取系统信息 import logging # Python自带的日志模块,用于日志记录 # 系统监控函数 def system_monitor(): # 获取CPU使用率 cpu_percent = psutil.cpu_percent() # 获取内存使用率 mem_percent = psutil.virtual_memory().percent # 获取磁盘使用率 disk_percent = psutil.disk_usage('/').percent # 将监控数据记录到日志中 logging.info('CPU使用率:{},内存使用率:{},磁盘使用率:{}'.format(cpu_percent, mem_percent, disk_percent)) # 日志管理函数 def log_management(): # 设置日志格式 logging.basicConfig(filename='log.txt', level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s') # 记录日志 logging.info('系统启动') # 查询日志 with open('log.txt', 'r') as f: logs = f.read() # 输出日志 print(logs) # 配置管理函数 def config_management(): # 设置环境变量 import os os.environ['ENV_VAR'] = 'value' # 获取环境变量 env_var = os.environ.get('ENV_VAR') # 输出环境变量 print(env_var) # 任务调度函数 def task_scheduling(): # 定义一个定时任务,每天执行一次 import schedule import time def job(): print('定时任务执行') schedule.every().day.at('00:00').do(job) # 循环执行任务 while True: schedule.run_pending() time.sleep(1) # 主函数 def main(): # 调用系统监控函数 system_monitor() # 调用日志管理函数 log_management() # 调用配置管理函数 config_management() # 调用任务调度函数 task_scheduling() if __name__ == '__main__': main() ``` 请注意,这只是一个简单的示例代码框架,实际运维管理系统需要根据实际需求进行设计和实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值