# streamlitcode **Repository Path**: cao15110/streamlitcode ## Basic Information - **Project Name**: streamlitcode - **Description**: 基于streamlit的云部署项目 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-14 - **Last Updated**: 2026-02-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目介绍 本项目是一个基于streamlit的python项目,主要部署在云端,用户可以在浏览器中直接使用。 注意: 1. 本项目主要部署在streamlit cloud上,用户可以在浏览器中直接使用https://wangshuai.streamlit.app/。 2. 本项目的代码是开源的,用户可以在github上查看和修改代码。 3. github限制单个文件大小为100MB。 ## streamlit打包的特性 由于项目基于streamlit并打包,打包后的exe文件只发挥python解释器的功能,而代码仍然以.py的python文件存在,在程序运行时才读取.py代码并运行,这就允许用户在pages中不断增加新的.py文件,增加新的功能。 ## streamlit cloud 云端免费部署的优劣 streamlit cloud 是streamlit官方提供的免费部署服务,用户可以在streamlit cloud上免费部署自己的streamlit项目,但是有一些限制,比如: 1. 必须要有一个github账号。 2. 受云端限制和安全限制,云端的任何程序都是不能操作用户本地电脑的文件(夹)的,这保护了用户的数据安全,但也造成了一些不便。 关于本地文件的操作:程序中有很多对本地文件的操作,如果程序只在本地运行,可以不受影响,但如果运行在云端,则需要考虑下载问题。 我的处理思路是io.BytesIO() 内存缓冲区 + zipfile.ZipFile 生成压缩包 + 把内存缓冲区交给 st.download_button,全程不落盘,直接提供下载结果。 # 本地浏览器使用说明 1. 用streamlit运行PDF.py ```bash python -m venv venv .\venv\Scripts\activate pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple streamlit run PDF.py ``` 2. 根据运行窗口生成的网址,或自动打开的网址,在浏览器中打开。 3. 上传pdf文件,根据需求点击按钮,结果展示在网页展示,并自动打开结果文件夹。 # pyinsaller打包教程 按操作执行:'如果需要打包,就把此文件夹中的内容放到项目根目录'文件夹下的内容移到根目录 1. 激活虚拟环境 ```bash .\venv\Scripts\activate ``` 2. 用spec打包,注意打包streamlit有点不同: 需要额外的run_app.py文件,需要特定的文件夹hooks,这个文件夹内还需要特定的hook-streamlit.py。 当然这些文件的内容都是固定的,不需要自己修改。 有了上面的基础,就可以打包了。注意修改run_app.spec中datas的文件夹路径 ```bash pyinstaller run_app.spec ``` 3. 打包完成后,在 dist 目录下会生成一个可执行文件,但这个执行文件无法运行,还需要把依赖的py文件复制到dist目录下。 本项目中是: PDF.py # 前端主程序 main.py # 后端主程序 pages/子页面的py文件 # 子页面的py文件 ## 注意事项 - 确保使用的是虚拟环境中的 Python 解释器,涉及到依赖问题。 - 先用纯英文目录测试,成功后再测试中文目录。 # 主页面PDF.py 主要是'PDFSizeAnalyzer-MCP'的前端页面。 关于MCP服务的说明,请看[mcp服务只用这个文件夹内容即可]文件夹下的说明.md文件。 在云端环境下,也就是本项目根目录的PDF.py文件中,只保留用前端js无法实现的章节信息提取功能。 在本地环境下,也就是本项目打包后的项目exe文件夹下的PDF.py文件中,保留了所有的功能。 # pages中的子页面 ## 1网易云音乐功能 - 单曲下载 - 歌单下载 ## 2酷匠网小说功能 - 小说下载 ## 3高德地图 - 坐标转换 - 道路及面状json获取 - 公交路线和站点获取 ## 4网页或md转word - 最好用的目前是obsidian,能直接保存为md。 - 这个功能能实现的网站很多,但达到自己需求的很少,大部分都需要自己调整。 ## 5网页转md - 这个和[4网页或md转word](#4网页或md转word)功能相辅相成。 - 对https://www.gov.cn/进行了清洗规则适配。 ## 6自定义模块化 本文档详细说明了在 `pages\6模块化.py` 中实现的自定义模板语法及其解析渲染功能。该模板系统支持变量引用、条件判断和各种交互控件,可用于创建动态内容和表单。所有函数都放到__init__.py中,6模块化.py中只保留具体的template内容。 ### 1. 变量引用系统 - 支持基础变量引用和默认值设置 - 变量值自动同步到会话状态 ### 2. 条件判断结构 - 支持布尔类型条件判断(基于复选框) - 支持表达式条件判断(基于变量值比较) - 支持嵌套的 if-elif-else 结构 ### 3. 交互式控件 - 单选按钮组(Radio) - 下拉选择框(Select) - 开关组件(Toggle) - 布尔判断 - 条件判断 ### 4. 变量管理 - 所有变量统一存储在 `st.session_state` 字典中 - 支持变量值的自动保存和恢复 ### 语法规范 #### 1. 变量引用 ``` {{ 变量名 }} {{ 变量名|default=默认值 }} ``` - **变量名**:支持英文字母、数字、下划线和中文字符 - **默认值**:可选参数,当变量未提供值时使用的默认内容 - **默认值分隔符**:仅支持等号(`=`)格式 **示例**: ``` {{ 用户名 }} {{ 项目状态|default=未开始 }} ``` #### 2. 条件判断 ##### 2.1 布尔类型条件判断 从st.session_state中获取条件名变量的值,判断是否为True。如果为True,则渲染if_body中的内容;如果为False,则渲染else_body中的内容。 ``` {% if 条件名 %} 条件成立时显示的内容 {% else %} 条件不成立时显示的内容 {% endif %} ``` **示例**: ``` {% if 有信访 %} 〔信访处理〕 存在相关信访事项。 {% else %} 〔信访处理〕 未收到相关信访事项。 {% endif %} ``` ##### 2.2 表达式条件判断 从st.session_state中获取变量名的值,判断是否为"值"或"其他值"。如果为"值",则渲染if_body中的内容;如果为"其他值",则渲染elif_body中的内容;如果都不是,则渲染else_body中的内容。 ``` {% if 变量名 = "值" %} 条件成立时显示的内容 {% elif 变量名 = "其他值" %} 其他条件成立时显示的内容 {% else %} 所有条件都不成立时显示的内容 {% endif %} ``` - 支持多个 `elif` 分支 - 条件值需要使用双引号包围 - 比较操作符目前只支持等号(`=`),比较变量值与指定字符串 **示例**: ``` {% if 信访渠道 = "来信" %} 情况1:来信了{{来信内容}} {% elif 信访渠道 = "来访" %} 情况2:来访了{{来访内容}} {% else %} 其他信访渠道 {% endif %} ``` #### 3. 交互式控件 ##### 3.1 单选按钮组 ``` {% radio 组名 %} 选项1|选项2|选项3 {% endradio %} ``` - **组名**:控件的变量名,用于在会话状态中存储用户选择的值 - **选项**:使用竖线(`|`)分隔的选项列表 - 渲染时会创建水平排列的按钮组 - 默认选中第一个选项 **示例**: ``` {% radio 信访渠道 %} 来信|来访|网上信访|电话信访 {% endradio %} ``` ##### 3.2 下拉选择框 ``` {% select 列表名 %} 选项1|选项2|选项3 {% endselect %} ``` - **列表名**:控件的变量名,用于在会话状态中存储用户选择的值 - **选项**:使用竖线(`|`)分隔的选项列表 - 渲染时会创建标准的下拉选择框 - 默认选中第一个选项 **示例**: ``` {% select 信访类型 %} 征地补偿|安置方案|土地权属|违法占地 {% endselect %} ``` ##### 3.3 开关组件 ``` {% toggle 开关名 %} {% endtoggle %} ``` - **开关名**:控件的变量名,用于在会话状态中存储用户选择的值 - 渲染时会创建一个开关组件,用户打开表示条件成立,关闭表示条件不成立 - 默认状态为True **示例**: ``` {% toggle 有信访 %} {% endtoggle %} ``` ### 变量管理机制 1. **统一存储**:所有变量值统一存储在 `st.session_state.default_values` 字典中 2. **自动保存**:用户的选择和输入会自动保存到会话状态 3. **跨组件共享**:变量可以在不同的组件和条件分支之间共享 ### 完整示例 下面是一个完整的模板示例,展示了各种语法的组合使用: ``` {% radio 信访渠道 %} 来信|来访|网上信访|电话信访 {% endradio %} {% select 信访类型 %} 征地补偿|安置方案|土地权属|违法占地 {% endselect %} {% if 有信访 %} 〔信访处理〕 {{信访年月}},{{信访县乡村}}村民{{信访人姓名}}来信(访)反映该批次拟占地块{{信访反映具体内容}}。{{受理自然资源主管部门}}进行了认真调查处理,{{处理具体措施}}。目前,信访群众反映的问题已得到妥善解决,信访人表示不再上访。 {% else %} 〔信访处理〕 该批次用地截至目前未收到相关信访事项。 {% endif %} # 条件表达式类型if判断 {% if 信访渠道 = "来信" %} 情况1:来信了{{来信内容}} {% elif 信访渠道 = "来访" %} 情况2:来访了{{来访内容}} {% else %} 其他信访渠道的处理方式 {% endif %} ``` ### 使用说明 1. **创建模板**:按照上述语法编写模板内容 2. **解析渲染**:将模板传递给 `ast()` 函数解析,然后用 `render_content()` 函数渲染 3. **用户交互**:用户可以通过点击按钮、选择下拉框、填写文本等方式提供输入 4. **获取结果**:变量值会自动保存到 `st.session_state.default_values` 字典中,可用于后续处理 ### 注意事项 1. 所有控制标签使用 `{%` 和 `%}` 包裹,变量引用使用 `{{` 和 `}}` 包裹 2. 条件判断标签必须正确闭合(`{% if %}` 对应 `{% endif %}`) 3. 选项列表中的分隔符必须是竖线(`|`),不要有多余的空格 4. 表达式条件判断的值必须用双引号包围 5. 模板解析错误时会显示错误提示,请检查语法是否正确 ### 高级功能 1. **嵌套条件**:支持条件判断的嵌套使用 2. **变量复用**:一个变量可以在模板中多处引用,保持值的一致性 3. **默认值继承**:如果变量在会话状态中已存在,会优先使用已有值 ### 案例1 ```markdown {% radio 批次类型 %} 普通批次|增减挂钩批次 {% endradio %} {% toggle 分次报批 %} {% endtoggle %} {% if 批次类型 = "普通批次" %} 该批次申请将农用地{{转用农用地|default:0.0000}}公顷(耕地{{转用耕地|default:0.0000}}公顷)、未利用地{{转用未利用地|default:0.0000}}公顷转为建设用地,其中:农民集体所有农用地{{集体转用农用地|default:0.0000}}公顷(耕地{{集体转用耕地|default:0.0000}}公顷)、未利用地{{集体转用未利用地|default:0.0000}}公顷;国有农用地{{国有转用农用地|default:0.0000}}公顷(耕地{{国有转用耕地|default:0.0000}}公顷)、未利用地{{国有转用未利用地|default:0.0000}}公顷。 {% else %} 该批次使用{{指标来源|default:*县自产}}{{挂钩指标面积|default:0.0000}}公顷,其中水田{{挂钩水田|default:0.0000}}公顷,标准粮食产能{{挂钩产能|default:0}}公斤; {% endif %} {% if 分次报批 %} 建新区拟使用土地{{新区拟用面积|default:0.0000}}公顷,其中水田{{新区水田|default:0.0000}}公顷,标准粮食产能{{新区产能|default:0}}公斤。建新区土地已全部转为建设用地。 {% else %} 建新区已使用{{已用面积|default:0.0000}}公顷,其中水田{{已用水田|default:0.0000}}公顷,标准粮食产能{{已用产能|default:0}}公斤;本次报批{{本次报批面积|default:0.0000}}公顷,其中水田{{本次水田|default:0.0000}}公顷,标准粮食产能{{本次产能|default:0}}公斤;剩余{{剩余面积|default:0.0000}}公顷,其中水田{{剩余水田|default:0.0000}}公顷,标准粮食产能{{剩余产能|default:0}}公斤。建新区土地已全部转为建设用地。 {% endif %} ``` ## 7坐标转shp和kml 支持文本坐标转换为shp和kml文件。 ## 8word模板生成器 解决{}占位符问题,直接在word模板中使用{}进行批量文件的生成。 ## 50网站导航 - 导航