flask上传作品之dbm操作怎么实现

发布时间:2022-04-24 10:16:50 作者:iii
来源:亿速云 阅读:185

Flask上传作品之dbm操作怎么实现

在现代Web开发中,文件上传是一个常见的需求。Flask轻量级的Python Web框架,提供了简单易用的工具来处理文件上传。本文将详细介绍如何在Flask应用中实现文件上传,并使用Python的dbm模块来管理上传的文件信息。

1. Flask文件上传基础

1.1 安装Flask

首先,确保你已经安装了Flask。如果还没有安装,可以使用以下命令进行安装:

pip install Flask

1.2 创建Flask应用

创建一个简单的Flask应用,用于处理文件上传:

from flask import Flask, render_template, request, redirect, url_for
import os

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads/'

if not os.path.exists(app.config['UPLOAD_FOLDER']):
    os.makedirs(app.config['UPLOAD_FOLDER'])

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload_file():
    if 'file' not in request.files:
        return redirect(request.url)
    file = request.files['file']
    if file.filename == '':
        return redirect(request.url)
    if file:
        filename = file.filename
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True)

1.3 创建HTML表单

templates目录下创建一个index.html文件,用于上传文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>File Upload</title>
</head>
<body>
    <h1>Upload a File</h1>
    <form action="{{ url_for('upload_file') }}" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="Upload">
    </form>
</body>
</html>

1.4 运行应用

运行Flask应用:

python app.py

访问http://127.0.0.1:5000/,你将看到一个简单的文件上传表单。选择一个文件并点击“Upload”按钮,文件将被上传到uploads/目录。

2. 使用dbm管理上传文件信息

dbm是Python标准库中的一个模块,用于简单的键值对存储。我们可以使用dbm来存储上传文件的相关信息,如文件名、上传时间等。

2.1 安装dbm

dbm是Python标准库的一部分,无需额外安装。

2.2 修改Flask应用

修改app.py,添加dbm操作:

import dbm
from datetime import datetime

@app.route('/upload', methods=['POST'])
def upload_file():
    if 'file' not in request.files:
        return redirect(request.url)
    file = request.files['file']
    if file.filename == '':
        return redirect(request.url)
    if file:
        filename = file.filename
        filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
        file.save(filepath)

        # 使用dbm存储文件信息
        with dbm.open('file_info.db', 'c') as db:
            db[filename] = str(datetime.now())

        return redirect(url_for('index'))

@app.route('/files')
def list_files():
    files = []
    with dbm.open('file_info.db', 'r') as db:
        for key in db.keys():
            files.append({
                'filename': key.decode('utf-8'),
                'upload_time': db[key].decode('utf-8')
            })
    return render_template('files.html', files=files)

2.3 创建文件列表页面

templates目录下创建一个files.html文件,用于显示上传的文件列表:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Uploaded Files</title>
</head>
<body>
    <h1>Uploaded Files</h1>
    <table border="1">
        <tr>
            <th>Filename</th>
            <th>Upload Time</th>
        </tr>
        {% for file in files %}
        <tr>
            <td>{{ file.filename }}</td>
            <td>{{ file.upload_time }}</td>
        </tr>
        {% endfor %}
    </table>
    <a href="{{ url_for('index') }}">Back to Upload</a>
</body>
</html>

2.4 运行应用

再次运行Flask应用,上传文件后,访问http://127.0.0.1:5000/files,你将看到上传的文件列表及其上传时间。

3. 扩展功能

3.1 文件删除

我们可以添加一个功能,允许用户删除已上传的文件。

修改app.py,添加删除功能:

@app.route('/delete/<filename>')
def delete_file(filename):
    filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
    if os.path.exists(filepath):
        os.remove(filepath)
    with dbm.open('file_info.db', 'w') as db:
        if filename.encode('utf-8') in db:
            del db[filename.encode('utf-8')]
    return redirect(url_for('list_files'))

修改files.html,添加删除链接:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Uploaded Files</title>
</head>
<body>
    <h1>Uploaded Files</h1>
    <table border="1">
        <tr>
            <th>Filename</th>
            <th>Upload Time</th>
            <th>Action</th>
        </tr>
        {% for file in files %}
        <tr>
            <td>{{ file.filename }}</td>
            <td>{{ file.upload_time }}</td>
            <td><a href="{{ url_for('delete_file', filename=file.filename) }}">Delete</a></td>
        </tr>
        {% endfor %}
    </table>
    <a href="{{ url_for('index') }}">Back to Upload</a>
</body>
</html>

3.2 文件下载

我们可以添加一个功能,允许用户下载已上传的文件。

修改app.py,添加下载功能:

from flask import send_from_directory

@app.route('/download/<filename>')
def download_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename)

修改files.html,添加下载链接:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Uploaded Files</title>
</head>
<body>
    <h1>Uploaded Files</h1>
    <table border="1">
        <tr>
            <th>Filename</th>
            <th>Upload Time</th>
            <th>Action</th>
        </tr>
        {% for file in files %}
        <tr>
            <td>{{ file.filename }}</td>
            <td>{{ file.upload_time }}</td>
            <td>
                <a href="{{ url_for('download_file', filename=file.filename) }}">Download</a>
                <a href="{{ url_for('delete_file', filename=file.filename) }}">Delete</a>
            </td>
        </tr>
        {% endfor %}
    </table>
    <a href="{{ url_for('index') }}">Back to Upload</a>
</body>
</html>

4. 总结

本文详细介绍了如何在Flask应用中实现文件上传,并使用dbm模块来管理上传的文件信息。通过扩展功能,我们还实现了文件的删除和下载。dbm简单的键值对存储工具,非常适合用于管理小规模的文件信息。对于更复杂的应用场景,可以考虑使用更强大的数据库系统,如SQLite、MySQL或PostgreSQL。

通过本文的学习,你应该能够掌握Flask文件上传的基本操作,并了解如何使用dbm来管理文件信息。希望本文对你有所帮助,祝你在Flask开发中取得更多成果!

推荐阅读:
  1. flask学习之数据库操作一
  2. Flask入门-上传的问题

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

flask dbm

上一篇:axios怎么配置请求头content-type

下一篇:Vue的新型前端构建工具Vite怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》