简介
项目早期,不希望引入Vue、React等来增加复杂度,更不希望将大量时间花在CSS、JS实现页面布局和交互上,那如何快速构建一个Demo级用例呢?
你可以试试streamlit,经过我一段时间的使用,感觉是个不错的工具,嗯,开源的:https://github.com/streamlit/streamlit
而且,商业化感觉做的不错,社区比较活跃,可用组件比较丰富。

本文先会介绍Streamlit的基础用法,然后会讨论如何实现登录、注册,并在最后提一下我眼中它的缺点。
run streamlit
streamlit自己的定位是给数据科学家使用的web原型开发工具,通过streamlit,你可以快速上线你的模型或各种数据分析报告。
这里,基于streamlit教程文档,了解streamlit的基础用法,其实这块,不是本文的重点,但为了文章完整性,还是补一下。
首先,你需要安装一下streamlit。
pip install streamlit
因为streamlit依赖比较多,建议你在虚拟环境中搞。
安装完后,可以先来个hello world,创建hello.py文件,代码如下:
import streamlit as st
st.title('Hello World!')
run起来:
streamlit run hello.py
效果如下:

streamlit提供了很多组件,供你开发美观的页面,关于如何使用,streamlit的文档写的已经很好了,这里不费过多笔墨去讨论这个,大家看见文档就好了:https://docs.streamlit.io/library/get-started/create-an-app。
本文主要聊点文档中没有的。
streamlit如何启动的?
streamlit运行方式是使用streamlit run xxx.py的形式,阅读文档,发现,它也支持python -m streamlit run xxx.py 的形式。
感觉控制感不强,streamlit run命令是怎么运行的?
拉下streamlit源码,看其setup.py文件中的entry_points配置。

由上图可知,streamlit命令的功能来自streamlit/web/cli.py的main()方法。

嗯,使用click库来接收命令参数,提一嘴,我感觉click库接收命令行参数的方式比Python原生的argparse优雅多了。
简单阅读cli.py的代码,可以发现streamlit基于tornado开发,使用了tornado.httpserve作为Web后端。

Tornado是Python中比较老的Web框架了,当时python的asyncio还不成熟,为了获得高性能的web框架,tornado基于Linux的epoll和BSD的kqueue实现了其高性能的异步io,其源码比较复杂难懂。
经过代码阅读,可以发现,streamlit会先载入index.html,然后再在index.html中嵌入你的页面逻辑(即使用streamlit提供组件创建的页面),具体的嵌入位置是id为root的div元素。

这便是streamlit的基本流程。
消除streamlit标识
在我们实现hello.py并运行起来时,会发现多处都有streamlit的