返回顶部
首页 > 资讯 > 后端开发 > Python >使用Python怎么开发一个个人云盘应用
  • 251
分享到

使用Python怎么开发一个个人云盘应用

2023-06-14 14:06:37 251人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

本篇文章为大家展示了使用python怎么开发一个个人云盘应用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python的数据类型有哪些?python的数据类型:1. 数字类型,包括int(整型)、l

本篇文章为大家展示了使用python怎么开发一个个人云盘应用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

Python的数据类型有哪些?

python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(浮点型)。2.字符串,分别是str类型和unicode类型。3.布尔型,Python布尔类型也是用于逻辑运算,有两个值:True(真)和False(假)。4.列表,列表是Python中使用最频繁的数据类型,集合中可以放任何数据类型。5. 元组,元组用”()”标识,内部元素用逗号隔开。6. 字典,字典是一种键值对的集合。7. 集合,集合是一个无序的、不重复的数据组合。

app1.py

import dashimport dash_uploader as duimport dash_bootstrap_components as dbcimport dash_html_components as htmlapp = dash.Dash(__name__)# 配置上传文件夹du.configure_upload(app, folder='temp')app.layout = html.Div(    dbc.Container(        du.Upload()    ))if __name__ == '__main__':    app.run_server(debug=True)

使用Python怎么开发一个个人云盘应用

可以看到,仅仅十几行代码,我们就配合dash-uploader实现了简单的文件上传功能,其中涉及到dash-uploader两个必不可少的部分:

2.1.1 利用du.configure_upload()进行配置

要在Dash中正常使用dash-uploader,我们首先需要利用du.configure_upload()进行相关配置,其主要参数有:

「app」,即对应已经实例化的Dash对象;

「folder」,用于设置上传的文件所保存的根目录,可以是相对路径,也可以是绝对路径;

「use_upload_id」,bool型,默认为True,这时被用户上传的文件不会直接置于「folder」参数指定目录,而是会存放于du.Upload()部件的upload_id对应的子文件夹之下;设置为False时则会直接存放在根目录,当然没有特殊需求还是不要设置为False。

通过du.configure_upload()我们就完成了基本的配置。

2.1.2 利用du.Upload()创建上传部件

接下来我们就可以使用到du.Upload()来创建在浏览器中渲染供用户使用的上传部件了,它跟常规的Dash部件一样具有「id」参数,也有一些其他的丰富的参数供开发者充分自由地自定义功能和样式:

「text」,字符型,用于设置上传部件内显示的文字;

「text_completed」,字符型,用于设置上传完成后显示的文字内容前缀;

「cancel_button」,bool型,用于设置是否在上传过程中显示“取消”按钮;

「pause_button」,bool型,用于设置是否在上传过程中显示“暂停”按钮;

「filetypes」,用于限制用户上传文件的格式范围,譬如['zip', 'rar', '7zp']就限制用户只能上传这三种格式的文件。默认为None即无限制;

「max_file_size」,int型,单位MB,用于限制单次上传的大小上限,默认为1024即1GB;

「default_style」,类似常规Dash部件的style参数,用于传入CSS键值对,对部件的样式进行自定义;

「upload_id」,用于设置部件的唯一id信息作为du.configure_upload()中所设置的缓存根目录的下级子目录,用于存放上传的文件,默认为None,会在Dash应用启动时自动生成一个随机值;

「max_files」,int型,用于设置一次上传最多可包含的文件数量,默认为1,也推荐设置为1,因为目前对于多文件上传仍有「进度条异常」、「上传结束显示异常」等bug,所以不推荐设置大于1。

知晓了这些参数的作用之后,我们就可以创建出更符合自己需求的上传部件:

app2.py

import dashimport dash_uploader as duimport dash_bootstrap_components as dbcimport dash_html_components as htmlapp = dash.Dash(__name__)# 配置上传文件夹du.configure_upload(app, folder='temp')app.layout = html.Div(    dbc.Container(        du.Upload(            id='uploader',            text='点击或拖动文件到此进行上传!',            text_completed='已完成上传文件:',            cancel_button=True,            pause_button=True,            filetypes=['md', 'mp4'],            default_style={                'background-color': '#fafafa',                'font-weight': 'bold'            },            upload_id='我的上传'        )    ))if __name__ == '__main__':    app.run_server(debug=True)

使用Python怎么开发一个个人云盘应用

但像前面的例子那样直接在定义app.layout时就传入实际的du.Upload()部件,会产生一个问题——应用启动后,任何访问应用的用户都对应一样的upload_id,这显然不是我们期望的,因为不同用户的上传文件会混在一起。

因此可以参考下面例子的方式,在每位用户访问时再渲染随机id的上传部件,从而确保唯一性:

app3.py

import dashimport dash_uploader as duimport dash_bootstrap_components as dbcimport dash_html_components as htmlimport uuidapp = dash.Dash(__name__)# 配置上传文件夹du.configure_upload(app, folder='temp')def render_random_id_uploader():    return du.Upload(            id='uploader',            text='点击或拖动文件到此进行上传!',            text_completed='已完成上传文件:',            cancel_button=True,            pause_button=True,            filetypes=['md', 'mp4'],            default_style={                'background-color': '#fafafa',                'font-weight': 'bold'            },            upload_id=uuid.uuid1()        )def render_layout():    return html.Div(    dbc.Container(        render_random_id_uploader()    ))app.layout = render_layoutif __name__ == '__main__':    app.run_server(debug=True)

可以看到,每次访问时由于upload_id不同,因此不同的会话拥有了不同的子目录。

使用Python怎么开发一个个人云盘应用

2.1.3 配合du.Upload()进行回调

在du.Upload()中额外还有isCompleted与fileNames两个属性,前者用于判断当前文件是否上传完成,后者则对应此次上传的文件名称,参考下面这个简单的例子:

app4.py

import dashimport dash_uploader as duimport dash_bootstrap_components as dbcimport dash_html_components as htmlfrom dash.dependencies import Input, Output, Stateapp = dash.Dash(__name__)# 配置上传文件夹du.configure_upload(app, folder='temp')app.layout = html.Div(    dbc.Container(        [            du.Upload(id='uploader'),            html.H5('上传中或还未上传文件!', id='upload_status')        ]    ))@app.callback(    Output('upload_status', 'children'),    Input('uploader', 'isCompleted'),    State('uploader', 'fileNames'))def show_upload_status(isCompleted, fileNames):    if isCompleted:        return '已完成上传:'+fileNames[0]    return dash.no_updateif __name__ == '__main__':    app.run_server(debug=True, port=8051)

使用Python怎么开发一个个人云盘应用

2.2 配合flask进行文件下载

相较于文件上传,在Dash中进行文件的下载就简单得多,因为我们可以配合flask的send_from_directory以及html.A()部件来为指定的服务器端文件创建下载链接,譬如下面的简单示例就打通了文件的上传与下载:

app5.py

from flask import send_from_directoryimport dashimport dash_uploader as duimport dash_html_components as htmlimport dash_bootstrap_components as dbcfrom dash.dependencies import Input, Outputimport osapp = dash.Dash(__name__)du.configure_upload(app, 'temp', use_upload_id=False)app.layout = html.Div(    dbc.Container(        [            du.Upload(id='upload'),            html.Div(                id='download-files'            )        ]    ))@app.server.route('/download/<file>')def download(file):    return send_from_directory('temp', file)@app.callback(    Output('download-files', 'children'),    Input('upload', 'isCompleted'))def render_download_url(isCompleted):    if isCompleted:        return html.Ul(            [                html.Li(html.A(f'/{file}', href=f'/download/{file}', target='_blank'))                for file in os.listdir('temp')            ]        )    return dash.no_updateif __name__ == '__main__':    app.run_server(debug=True)

使用Python怎么开发一个个人云盘应用

3 用Dash编写简易个人网盘应用

学习了今天的案例之后,我们就掌握了如何在Dash中开发文件上传及下载功能,下面我们按照惯例,结合今天的主要内容,来编写一个实际的案例;

今天我们要编写的是一个简单的个人网盘应用,我们可以通过浏览器访问它,进行文件的上传、下载以及删除:

使用Python怎么开发一个个人云盘应用

import dashimport dash_bootstrap_components as dbcimport dash_html_components as htmlfrom dash.dependencies import Input, Output, Stateimport dash_uploader as duimport osfrom flask import send_from_directoryimport timeapp = dash.Dash(__name__, suppress_callback_exceptions=True)du.configure_upload(app, 'NetDisk', use_upload_id=False)app.layout = html.Div(    dbc.Container(        [            html.H3('简易的个人云盘应用'),            html.Hr(),            html.P('文件上传区:'),            du.Upload(id='upload',                      text='点击或拖动文件到此进行上传!',                      text_completed='已完成上传文件:',                      max_files=1000),            html.Hr(),            dbc.Row(                [                    dbc.Button('删除选中的文件', id='delete-btn', outline=True),                    dbc.Button('打包下载选中的文件', id='download-btn', outline=True)                ]            ),            html.Hr(),            dbc.Spinner(                dbc.Checklist(                    id='file-list-check'                )            ),            html.A(id='download-url', target='_blank')        ]    ))@app.server.route('/download/<file>')def download(file):    return send_from_directory('NetDisk', file)@app.callback(    [Output('file-list-check', 'options'),     Output('download-url', 'children'),     Output('download-url', 'href')],    [Input('upload', 'isCompleted'),     Input('delete-btn', 'n_clicks'),     Input('download-btn', 'n_clicks')],    State('file-list-check', 'value'))def render_file_list(isCompleted, delete_n_clicks, download_n_clicks, check_value):    # 获取上下文信息    ctx = dash.callback_context    if ctx.triggered[0]['prop_id'] == 'delete-btn.n_clicks':        for file in check_value:            try:                os.remove(os.path.join('NetDisk', file))            except FileNotFoundError:                pass    if ctx.triggered[0]['prop_id'] == 'download-btn.n_clicks':        import zipfile        with zipfile.ZipFile('NetDisk/打包下载.zip', 'w') as zipobj:            for file in check_value:                try:                    zipobj.write(os.path.join('NetDisk', file))                except FileNotFoundError:                    pass        return [                   {'label': file, 'value': file}                   for file in os.listdir('NetDisk')                   if file != '打包下载.zip'               ], '打包下载链接', '/download/打包下载.zip'    time.sleep(2)    return [               {'label': file, 'value': file}               for file in os.listdir('NetDisk')               if file != '打包下载.zip'           ], '', ''if __name__ == '__main__':    app.run_server(debug=True)

上述内容就是使用Python怎么开发一个个人云盘应用,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网Python频道。

--结束END--

本文标题: 使用Python怎么开发一个个人云盘应用

本文链接: https://lsjlt.com/news/271437.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用Python怎么开发一个个人云盘应用
    本篇文章为大家展示了使用Python怎么开发一个个人云盘应用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、lo...
    99+
    2023-06-14
  • 90行Python代码开发个人云盘应用
    目录1 简介2 在Dash中实现文件上传与下载2.1 在Dash中配合dash-uploader实现文件上传2.1.1 利用du.configure_upload...
    99+
    2024-04-02
  • 使用WebIDE怎么开发一个Android应用
    本篇文章给大家分享的是有关使用WebIDE怎么开发一个Android应用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C4C里做Android开发用的是Google的Andro...
    99+
    2023-06-04
  • 教你如何使用Python开发一个钉钉群应答机器人
    前提 搭建钉钉应答机器人,需要先准备或拥有以下权限: 钉钉企业的管理员或子管理员(如果不是企业管理员,可以自己创建一个企业,很方便的) 有公网通信地址(内网穿透也可...
    99+
    2024-04-02
  • 怎么使用vue和electron开发一个桌面应用
    本文小编为大家详细介绍“怎么使用vue和electron开发一个桌面应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用vue和electron开发一个桌面应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-05
  • vscode中怎么开发一个vue应用
    今天就跟大家聊聊有关vscode中怎么开发一个vue应用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。从安装开始为了准确起见,我们把vscode里所...
    99+
    2024-04-02
  • 如何使用Kotlin开发一个Android应用
    如何使用Kotlin开发一个Android应用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。第一步:为AndroidStudio安装Kotlin插件在线安装步骤...
    99+
    2023-05-30
    android kotlin
  • Java怎么搭建一个个人网盘
    这篇文章将为大家详细讲解有关Java怎么搭建一个个人网盘,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式...
    99+
    2023-06-14
  • 基于Python+Pyqt5开发一个应用程序
    介绍你的那个她/他 1. UI —MainWindow设计界面及代码 # -*- coding: utf-8 -*- # Form implementation genera...
    99+
    2024-04-02
  • 如何利用Python来开发一个QQ机器人
    今天就跟大家聊聊有关如何利用Python来开发一个QQ机器人,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。安装方法可在 Python个版本下使用,用 pip 安装:pip insta...
    99+
    2023-06-17
  • 如何开发一个springboot应用
    本文小编为大家详细介绍“如何开发一个springboot应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何开发一个springboot应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。如何编写 spring...
    99+
    2023-06-30
  • 使用Kotlin如何实现开发一个Android应用
    今天就跟大家聊聊有关使用Kotlin如何实现开发一个Android应用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。配置项目gradle文件apply plugin: 'co...
    99+
    2023-05-31
    kotlin android roi
  • 阿里云用云服务器做个人云盘怎么用
    如果您使用的是阿里云提供的个人云存储服务,您可以按照以下步骤使用云服务器来制作个人云盘: 注册阿里云账户:登录阿里云账户,在账户设置中找到个人云存储服务并设置您的云存储账号和密码。 创建云盘文件:在云端主机上创建文件夹,文件夹内的文件将...
    99+
    2023-10-26
    阿里 服务器 云用云
  • 利用 Python 开发一个 Python 解释器
    目录1.标记(Token)2.词法分析器(Lexer)3.巴科斯-诺尔范式(Backus-Naur Form,BNF)4.解析器(Parser)前言: 计算机只能理解机器码。归根结底...
    99+
    2024-04-02
  • 在Android 开发中使用camera怎么实现一个人脸识别功能
    这篇文章将为大家详细讲解有关在Android 开发中使用camera怎么实现一个人脸识别功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Android camera实时预览 实时处理,面部...
    99+
    2023-05-31
    android camera
  • 怎么用Docker部署一个Python应用
    本文小编为大家详细介绍“怎么用Docker部署一个Python应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Docker部署一个Python应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言在使用...
    99+
    2023-07-02
  • 个人怎么使用云服务器
    个人可以使用云服务器进行以下操作:1. 创建云服务器实例:选择云服务器的操作系统、硬件配置和存储空间等,然后根据需要创建一个云服务器...
    99+
    2023-08-29
    云服务器
  • 怎么开发一个渐进式Web应用程序PWA
    小编给大家分享一下怎么开发一个渐进式Web应用程序PWA,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!要求要开始学习本教程,您必须安装以下软件:node 8.9 ...
    99+
    2023-06-15
  • 从0开始教你开发一个springboot应用
    目录如何编写 springboot 应用一、引入场景依赖二、查看自动配置三、是否需要修改1.参照文档修改配置项2.新增自定义的组件或替换原组件如何编写 springboot 应用 其...
    99+
    2024-04-02
  • 阿里云用云服务器做个人云盘怎么用啊
    如果您使用的是阿里云的云服务器,那么可以使用以下方法来使用云服务器中的云盘: 登录云盘账号:首先,需要在阿里云官网上注册账号。注册账号需要填写邮箱、密码以及一个个人身份信息。 创建云盘:打开阿里云官网,找到右侧的“创建新云盘”选项。在这...
    99+
    2023-10-26
    阿里 服务器 云用云
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作