Python+Streamlit aggrid+MongoDB GridFS构建低代码文档管理应用(文档查询下载实用篇)
1. Sreamlit aggrid简介
Sreamlit aggrid是Streamlit的Ag-Grid组件的实现,在Python Streamlit框架下,更加灵活的使用表格,包括分组、排序、编辑、选择行等等,功能较为强大,补充Streamlit表格处理弱的情况,结合Streamlit可视化图,方便数据分析人员实现可视化数据分析报告。
ag-grid是一款功能和性能强大外观漂亮的表格插件,ag-grid几乎能满足你对数据表格所有需求。固定列、拖动列大小和位置、多表头、自定义排序等等各种常用又必不可少功能。关于收费的问题,绝大部分应用用免费的社区版就够了,ag-grid-community社区版一样功能强大。
中文API文档: https://www.itxst.com/ag-grid/tutorial.html
Sreamlit aggrid资源地址如下:
- https://github.com/PablocFonseca/streamlit-aggrid
- https://streamlit-aggrid.readthedocs.io/en/docs/
使用Streamlit-aggrid,直接pip安装即可:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Streamlit-aggrid
2. 文档查询下载功能实践
2.1. 功能描述
根据关键字、文档分类、时间、搜索等方法,查询返回的结果用表格呈现,往往存在很多行数据的情况,需要从中选择目标文档。通过选中行,获取所在行的文档名称,或者文档ID。再依据文档名称(或文档ID),从Mongo DB数据库中获取文件,下载到本地。界面效果如下所示。
2.2. 代码实现
2.2.1. 查询文件
在Mongo DB数据库中,给出如下结构:
本实践案例,先以简单查询为例,直接查询全量集合(表)中的数据(可以自行加模糊查询等)。
# 数据库,集合名称
def queryfile(db,collectionname):collection = db[collectionname]query_dict = {}col_name = {"_id":0 ,"filename":1 ,"length":1,'classic':1,'keyword':1,'descripte':1,'length':1,'uploadDate':1,'filetype':1} df = pd.DataFrame(list(collection.find(query_dict,col_name)))rencolnames = {"filename":'文件名称' ,"length":'文件长度','classic':'文件分类','keyword':'关键字','descripte':'文件描述','uploadDate':'上传日期','filetype':'文件类型'}colnames = ['文件名称' ,'文件长度','文件分类','关键字','文件描述','上传日期','文件类型']df = df.rename(columns=rencolnames)df = df[colnames]return df
2.2.2. 构造可选中行的表格
构造可选中行的表格涉及到两个函数,分别是渲染表格的AgGrid()和定义表格操作的GridOptionsBuilder类。
AgGrid是用于渲染页面表格的主要函数。详见“https://streamlit-aggrid.readthedocs.io/en/docs/AgGrid.html”
GridOptionsBuilder类可用于帮助定义gridOptions字典。尽管网格的配置可以通过传递字典来完成,但建议使用GridOptionsBuilder。https://streamlit-aggrid.readthedocs.io/en/docs/GridOptionsBuilder.html
实践案例,定义单行选择表,选中行的数据,可以按字段/关键字读取出来。参考官方样例源代码见streamlit-aggrid examples。
# 定义单行选择表,选中行的数据,可以按字段/关键字读取出来
def aggrid(df):gb = GridOptionsBuilder.from_dataframe(df)selection_mode = 'single' # 定义单选模式,多选为'multiple'enable_enterprise_modules = True # 设置企业化模型,可以筛选等#gb.configure_default_column(editable=True) #定义允许编辑return_mode_value = DataReturnMode.FILTERED #__members__[return_mode]gb.configure_selection(selection_mode, use_checkbox=True) # 定义use_checkboxgb.configure_side_bar()gb.configure_grid_options(domLayout='normal')gb.configure_pagination(paginationAutoPageSize=True)gridOptions = gb.build()update_mode_value = GridUpdateMode.MODEL_CHANGEDgrid_response = AgGrid(df, gridOptions=gridOptions,data_return_mode=return_mode_value,update_mode=update_mode_value,enable_enterprise_modules=enable_enterprise_modules,) df = grid_response['data']selected = grid_response['selected_rows']return df, selected
2.2.3. 下载文档
# 文件下载
def filedownload():st.header("文档查询下载")st.markdown('查询数据库中的文档,显示文档列表。')db = connectmongo()df= queryfile(db,'books.files')df,selected = aggrid(df)if (len(selected)>0):filenameList = selected[0]inputfilename=filenameList['文件名称']else:inputfilename='请选择文件名'file_coll = 'books' with st.form(key='filename'):filename=st.text_input('输入文件名',inputfilename)submit_button = st.form_submit_button(label='确认') if submit_button:gridfs_col = GridFS(db, collection=file_coll)file_data = gridfs_col.get_version(filename=filename, version=-1).read()st.download_button('下载文件', file_data,file_name = filename)
其他相关代码详见博文《Python+Streamlit+MongoDB GridFS构建低代码文档管理应用(Demo篇)》
参考:
[1].heianduck. Streamlit(四) - st.dataframe. CSDN博客. 2022-01
[2]. 肖永威. Python+Streamlit+MongoDB GridFS构建低代码文档管理应用(Demo篇). CSDN博客. 2022.04
Python+Streamlit aggrid+MongoDB GridFS构建低代码文档管理应用(文档查询下载实用篇)相关推荐
- Python 分布式文件系统 Mongodb GridFS
Python 分布式文件系统 Mongodb GridFS~~~~ 抽时间关注下~~~ 转载于:https://www.cnblogs.com/macula7/archive/2010/03/31/1 ...
- python技术文档_Python技术文档最佳实践
所有好的产品都应该有一份简洁易读的使用说明书,除了苹果的产品.苹果认为他们的产品应该设计成为无须说明,用户天生就应该知道如何使用的那种. 但是很显然,对于软件来说,其复杂性之高,往往要求有与之配套的详 ...
- python打开word并在前台显示_Python办公自动化:自动打开word文档,你学到了吗?
今天中公优就业大白和大家分享Python办公自动化:自动打开word文档. python-docx允许您创建新文档以及更改现有文档.实际上,它只允许您更改现有文档; 但如果不存在此文件,将会自动从头开 ...
- python selenium中文文档-selenium-python中文版文档
安装 1.1. 简介 Selenium Python提供了一个简单的绑定式API来使用Selenium WebDriver编写功能/验收测试.通过Selenium Python API,您可以以一种直 ...
- 计算机毕业设计Python+djang公务员考试信息管理系统(源码+系统+mysql数据库+Lw文档)
项目介绍 随着社会的发展,近些年来的毕业生大多数会选择考研,考公员和考试教师资格证以增加自己在未来社会中的竞争能力.为了让这些有志之士能够有一个更好的学习和交流平台,我们通过计Python+djang ...
- python docx 合并文档 图片_MBT文档模型化生成工具——30倍效率文档撰写工程化方法...
MBT(A model based document builder)文档模型化生成工具用户手册--30倍效率文档撰写工程化方法 1 简介 在软件工程领域,工程文档通常主要包括实施方案.需求分析.软件 ...
- 使用Python互转pdf文档和word文档
1 前言 一日,欲将手头上的一份pdf文档转换成word文档.先试着用XX办公软件试了下,微信扫码登录后,在PDF转换界面,选中文档,点击"开始转换",弹出提示对话框:免费的只给转 ...
- python文档生成_python文档生成工具-pydoc
为了找到对象及其文档内容,pydoc 会导入文档所在的模块. 因此,任何模块层级的代码都将被执行. 请使用 if __name__ == '__main__': 语句来确保一个文件的特定代码仅在作为脚 ...
- 计算机毕业设计Python+django的火车票售票系统(源码+系统+mysql数据库+Lw文档)
项目介绍 随着现代火车售票管理的快速发展,可以说火车售票管理已经逐渐成为现代火车售票管理过程中最为重要的部分之一.但是一直以来我国传统的火车售票管理并没有建立一套完善的行之有效的火车售票管理系统,传统 ...
最新文章
- OpenCV(一)图像读取与新建、图像显示、操作图像像素(2种涂色并比较算法优劣、输出RGB)
- 通知 | 2017年清华-青岛数据科学研究院“RONG”奖学金即将开放申请
- 在Visual Studio 2008中编译snort-2.8.6.1.tar.gz
- Spring+XFire WS-Security安全认证开发感悟
- wk一sm5时间温度控制器_新能源汽车电机控制器温度计算及其模型—DC电容篇
- 程序员的语言“艳遇史”(一)——班长pascal
- 【NOIP2013模拟9.29】密码
- 背景图层和普通图层的区别_新手如何在PS中创建图层?不容错过的7种方法,你值得学习...
- UVA - 514 Rails-栈
- matlab动态仿真实例教程,MATLAB R2008控制系统动态仿真实例教程_IT教程网
- 时间序列模型ARIMA -- 唐宇迪
- 谈判如何在谈判中_谈判工作的十大规则
- 计算机老师任课教师寄语,任课老师新学期寄语
- 小米频繁投资内容渠道 是回归理性还是曲线救赎
- LVS的NAT、TUNNEL、Full-NAT模式
- Tobii pro lab学习笔记3_Metrics统计指标
- 浅析:XSS攻击、SQL注入攻击和CSRF攻击
- 力天创见人脸识别客流统计方案
- 关于小学和哥哥买零食的琐碎回忆
- oracle spool循环导出文件,oracle 使用spool导出数据到文件