Django+simpleui实现文件上传预览功能(详细过程)

 更新时间:2025年02月10日 10:09:34   作者:Summer@123  
该文章详细介绍了如何在Django框架中实现文件上传、预览和下载功能,并使用SimpleUI美化Django后台界面,通过创建模型、表单、视图和配置URL,实现了文件的存储和管理,同时,文章还提到了配置媒体文件、创建模板以及在生产环境中的部署注意事项,感兴趣的朋友一起看看吧

在 Django 中,文件通常不会直接存储到 MySQL 数据库中,而是存储在文件系统或云存储中,数据库中只存储文件的路径或元数据。

1. 创建 Django 项目和应用

如果还没有项目和应用,先创建一个:

django-admin startproject myproject
cd myproject
python manage.py startapp myapp

2. 配置 MySQL 数据库

settings.py 中配置 MySQL 数据库连接:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydatabase',  # 数据库名称
        'USER': 'root',        # 数据库用户名
        'PASSWORD': 'password',# 数据库密码
        'HOST': 'localhost',   # 数据库主机
        'PORT': '3306',        # 数据库端口
    }
}

确保已安装 MySQL 客户端库:

pip install mysqlclient

3. 创建模型

myapp/models.py 中创建一个模型来存储文件信息:

from django.db import models
class UploadedFile(models.Model):
    name = models.CharField(max_length=255, verbose_name="文件名称")
    file = models.FileField(upload_to='uploads/', verbose_name="文件")
    uploaded_at = models.DateTimeField(auto_now_add=True, verbose_name="上传时间")
    def __str__(self):
        return self.name
    class Meta:
        verbose_name = "上传文件"
        verbose_name_plural = "上传文件"

4. 创建表单

myapp/forms.py 中创建一个表单来处理文件上传:

from django import forms
from .models import UploadedFile
class UploadFileForm(forms.ModelForm):
    class Meta:
        model = UploadedFile
        fields = ['name', 'file']

5. 创建视图

myapp/views.py 中创建视图来处理文件的上传、预览和下载:

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import UploadedFile
from .forms import UploadFileForm
import os
def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return render(request, 'upload_success.html')
    else:
        form = UploadFileForm()
    return render(request, 'upload.html', {'form': form})
def preview_file(request, file_id):
    file = get_object_or_404(UploadedFile, id=file_id)
    return render(request, 'preview.html', {'file': file})
def download_file(request, file_id):
    file = get_object_or_404(UploadedFile, id=file_id)
    response = HttpResponse(file.file, content_type='application/force-download')
    response['Content-Disposition'] = f'attachment; filename={os.path.basename(file.file.name)}'
    return response

6. 配置 URL

myapp/urls.py 中配置 URL 路由:

from django.urls import path
from . import views
urlpatterns = [
    path('upload/', views.upload_file, name='upload_file'),
    path('preview/<int:file_id>/', views.preview_file, name='preview_file'),
    path('download/<int:file_id>/', views.download_file, name='download_file'),
]

myproject/urls.py 中包含应用的 URL:

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('myapp/', include('myapp.urls')),
]

7. 配置媒体文件

settings.py 中配置媒体文件的存储路径:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

myproject/urls.py 中添加媒体文件的 URL 配置:

from django.conf import settings
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

8. 创建模板

myapp/templates/ 目录下创建以下模板文件:

upload.html(文件上传页面)

<!DOCTYPE html>
<html>
<head>
    <title>Upload File</title>
</head>
<body>
    <h1>Upload File</h1>
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Upload</button>
    </form>
</body>
</html>

upload_success.html(上传成功页面)

<!DOCTYPE html>
<html>
<head>
    <title>Upload Success</title>
</head>
<body>
    <h1>File Uploaded Successfully</h1>
    <a href="{% url 'upload_file' %}" rel="external nofollow" >Upload another file</a>
</body>
</html>

preview.html(文件预览页面)

<!DOCTYPE html>
<html>
<head>
    <title>Preview File</title>
</head>
<body>
    <h1>{{ file.name }}</h1>
    <p>Uploaded at: {{ file.uploaded_at }}</p>
    <a href="{% url 'download_file' file.id %}" rel="external nofollow" >Download</a>
</body>
</html>

9. 配置 SimpleUI

settings.py 中安装并配置 SimpleUI:

INSTALLED_APPS = [
    ...
    'simpleui',
    'myapp',
    ...
]

SimpleUI 会自动美化 Django 后台界面,你可以在 settings.py 中进一步配置 SimpleUI 的主题和其他选项。

10. 运行服务器并测试

运行 Django 开发服务器:

python manage.py runserver

访问 http://127.0.0.1:8000/myapp/upload/ 进行文件上传、预览和下载的测试。

11. 部署

在生产环境中,确保配置好静态文件和媒体文件的处理方式,并考虑使用云存储服务(如 AWS S3)来存储上传的文件。

总结

通过以上步骤,可以实现管理员上传文件并将文件信息存储到 MySQL 数据库,同时支持前端预览和下载的功能。SimpleUI 用于美化 Django 后台界面,提升用户体验。

到此这篇关于Django+simpleui实现文件上传预览功能的文章就介绍到这了,更多相关Django simpleui文件上传预览内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python切片、strip()和LLM接口调用的实用技巧分享

    Python切片、strip()和LLM接口调用的实用技巧分享

    这篇教程详细介绍了Python中实用的List、切片操作和strip()方法,以及如何通过简单的代码调用LLM接口实现AI功能,适合Python初学者和进阶者学习,需要的朋友可以参考下
    2026-05-05
  • 使用PyInstaller 打包配置文件

    使用PyInstaller 打包配置文件

    这篇文章主要介绍了使用PyInstaller 打包配置文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • pycharm创建临时文件scatch file的方法详解

    pycharm创建临时文件scatch file的方法详解

    JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,这篇文章主要介绍了pycharm创建临时文件scatch file的方法,需要的朋友可以参考下
    2024-07-07
  • Java中MultipartFile与File互转的实现

    Java中MultipartFile与File互转的实现

    本文主要介绍了Java中MultipartFile与File互转的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • python实现查询IP地址所在地

    python实现查询IP地址所在地

    本文给大家分享的是使用Python实现根据ip138的API查询IP的地理位置的代码,非常的实用,推荐给大家,有需要的小伙伴可以参考下。
    2015-03-03
  • 解决更新tensorflow后应用tensorboard报错的问题

    解决更新tensorflow后应用tensorboard报错的问题

    这篇文章主要介绍了解决更新tensorflow后应用tensorboard报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 跟老齐学Python之有容乃大的list(1)

    跟老齐学Python之有容乃大的list(1)

    这一讲中的list类型,也是python的一种数据类型。翻译为:列表。LIST在python中具有非常强大的功能。
    2014-09-09
  • python项目对接钉钉SDK的实现

    python项目对接钉钉SDK的实现

    这篇文章主要介绍了python项目对接钉钉SDK的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 一文详解TensorFlow与PyTorch有什么关联

    一文详解TensorFlow与PyTorch有什么关联

    TensorFlow和PyTorch是两大主流深度学习框架,而Transformer是一种革命性的神经网络架构,这篇文章主要介绍了TensorFlow与PyTorch有什么关联的相关资料,文中介绍的非常详细,需要的朋友可以参考下
    2025-12-12
  • python OpenCV学习笔记直方图反向投影的实现

    python OpenCV学习笔记直方图反向投影的实现

    这篇文章主要介绍了python OpenCV学习笔记直方图反向投影的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02

最新评论