Python+Streamlit+MongoDB GridFS构建低代码文档管理应用(Demo篇)
Posted 肖永威
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python+Streamlit+MongoDB GridFS构建低代码文档管理应用(Demo篇)相关的知识,希望对你有一定的参考价值。
1. 文档管理概述
随着工作经历增加,积累的资料、文档早已“汗牛充栋”了,每每整理非常耗费时间和精力。多年来,一直想自己做些个人知识管理,也使用了些工具,但是基本是有始无终。
最近,又开始研究较新的业务领域,文档与知识梳理迫在眉睫,因此,自己动手做个低代码的个人知识管理、分析工具。
Gartner将信息治理定义为决策权的规范和责任框架,以确保在评估、创建、存储、使用、归档和销毁信息时适当的行为。它包括过程、角色和政策、标准和度量,确保有效和有效地利用信息,使组织实现其目标。
个人知识管理首先从基本的内容管理开始,内容管理工具的基本功包括,添加文档、上传文档、下载文档、删除文档等,进行文档的全生命周期管理,并涵盖对文档进行各种维度的分类,提取关键字和概略说明、建立引用关系等。
2. 技术架构
低代码文档管理应用采用B/S架构,Web服务由Python Streamlit所依赖的tornado提供,Web框架是Streamlit。
文件存储使用MongoDB GridFS,直接存储在数据库中,与操作系统的文件系统无关。
2.1. 文档数据库MongoDB概述
2.1.1. 简介
MongoDB是一个基于分布式文件存储的数据库。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
GridFS是MongoDB中存储和查询超过BSON文件大小限制(16M)的规范,GridFS使用两个集合保存数据,一个集合存储文件块,另外一个存储文件元数据。
2.1.2. 存储管理
MongodB使用两个集合来存储GridFS文件,一个是fs.files,另一个是fs.chunks。
- fs.files这个集合中存储的是每一个上传到数据库的文档的信息。
- fs.chunks这个集合存储的是上传文件的内容。一个chunk相当于一个文档(大文件被拆分成多个有序的chunk)。
2.2. 低代码Web数据可视化框架Streamlit概述
2.2.1. 什么是Streamlit?
让python代码快速生成web app是很多AI算法工程师们的需求,2019年新兴的这个streamlit项目能帮你解决类似的问题。Python应用程序框架Streamlit,是一个开源的Python库,在github(https://github.com/streamlit/streamlit)上超过17.2千颗stars(截止2022.1.11),利用Streamlit可以快速构建机器学习应用和高级数据分析可视化的用户界面。
Streamlit官方帮助文档为https://docs.streamlit.io/。
使用简单的pip安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Streamlit
2.2.2. Web框架
文档管理使用Streamlit的左右结构,左侧为菜单区,右侧为具体操作界面。
import streamlit as st
def navigation_bar():
st.set_page_config(layout="wide") #设置屏幕展开方式,宽屏模式布局更好
st.sidebar.write('文档管理导航栏')
add_selectbox = st.sidebar.radio(
"文档管理",
("上传文档", "下载文档", "文档查询")
)
if add_selectbox == '上传文档':
fileupload()
elif add_selectbox == '下载文档':
filedownload()
elif add_selectbox == '文档查询':
querybooks()
return add_selectbox
def main():
navigation_bar()
if __name__ == '__main__':
main()
3. 文件上传下载
Streamlit输入组件中,包括了文件上传下载组件,分别是st.file_uploader、st.download_button。
3.1. 文件上传
文件上传功能使用Streamlit显示文件上载程序小部件st.file_uploader。
默认情况下,上传的文件限制为200MB。您可以使用服务器对此进行配置。maxUploadSize配置选项。有关如何设置配置选项的更多信息,请参阅https://docs.streamlit.io/library/advanced-features/configuration#set-配置选项
代码如下:
def fileupload():
classic = st.selectbox('文档类别',['政策法规','文学作品','技术资料'])
filekeyword = st.text_input('文档关键字','AI')
filedesc = st.text_input('文档概述','简略描述文档')
uploaded_file = st.file_uploader("Choose a file")
if uploaded_file is not None:
# To read file as bytes:
bytes_data = uploaded_file.getvalue()
filename = uploaded_file.name
filetype = uploaded_file.type
db = connectmongo()
cn = 'books'
re = filetoGridFS(db, cn, filename, filetype ,classic, filekeyword, filedesc,bytes_data)
3.2. 文件保存到MongoDB GridFS
def connectmongo():
database_url = 'mongodb://localhost:27017/bigbooks'
client = pymongo.MongoClient(database_url)
db = client['BigBooks']
return db
# 文件写入MongodbGridFS
def filetoGridFS(db, file_coll, file_name,filetype,classic, filekeyword, filedesc, stringdata):
filter_condition = "filename": file_name,"filetype":filetype,"classic":classic,"keyword":filekeyword, "descripte":filedesc
gridfs_col = GridFS(db, collection=file_coll)
file_ = "0"
query = "filename":"","filetype":""
query["filename"] = file_name
query["filetype"] = filetype
if gridfs_col.exists(query):
return '已经存在该文件'
else:
file_ = gridfs_col.put(data=stringdata, **filter_condition) # 上传到gridfs
return file_
3.3. 文件下载
文件下载功能使用Streamlit显示文件下载按钮程序小部件st.download_button。
当您希望为用户提供一种直接从应用程序下载文件的方式时,这非常有用。
请注意,要下载的数据在用户连接时存储在内存中,因此最好将文件大小保持在几百MB以下,以节省内存。
输入文件名称方式,查找文件并下载。
查询文件,并把文件加载到内存中,接着显示出下载按钮。
使用下载按钮“Download files”下载文档到本地。
参考代码:
def filedownload_tmp():
db = connectmongo()
file_coll = 'books'
with st.form(key='filename'):
filename=st.text_input('输入文件名')
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('Download file', file_data,file_name = filename)
实用化应用实践,请关注后续内容。
参考:
[1]. MongoDB GridFS 怎么用. MongoDB中文社区. 2021-01-26
[2]. 肖永威. 初识内容管理(一).CSDN博客. 2017.06
[3]. 肖永威. 信息治理——初识内容管理(二).CSDN博客. 2017.09
[4]. 肖永威. Python数据分析师使用低代码Streamlit实现Web数据可视化方法——入门篇. CSDN博客. 2022.01
[5]. 肖永威.基于Python使用MongoDB及其GridFS进行文档管理. CSDN博客. 2019.09
以上是关于Python+Streamlit+MongoDB GridFS构建低代码文档管理应用(Demo篇)的主要内容,如果未能解决你的问题,请参考以下文章
Streamlit应用程序使用Streamlit-Authenticator进行用户的安全身份验证实践
Streamlit应用程序使用Streamlit-Authenticator进行用户的安全身份验证实践