Django+simpleui实现文件上传预览功能

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


1. 创建 Django 项目和应用

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

bash 复制代码
django-admin startproject myproject
cd myproject
python manage.py startapp myapp

2. 配置 MySQL 数据库

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

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

确保已安装 MySQL 客户端库:

bash 复制代码
pip install mysqlclient

3. 创建模型

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

python 复制代码
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 中创建一个表单来处理文件上传:

python 复制代码
from django import forms
from .models import UploadedFile

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

5. 创建视图

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

python 复制代码
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 路由:

python 复制代码
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:

python 复制代码
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 中配置媒体文件的存储路径:

python 复制代码
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

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

python 复制代码
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(文件上传页面)
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(上传成功页面)
html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>Upload Success</title>
</head>
<body>
    <h1>File Uploaded Successfully</h1>
    <a href="{% url 'upload_file' %}">Upload another file</a>
</body>
</html>
preview.html(文件预览页面)
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 %}">Download</a>
</body>
</html>

9. 配置 SimpleUI

settings.py 中安装并配置 SimpleUI:

python 复制代码
INSTALLED_APPS = [
    ...
    'simpleui',
    'myapp',
    ...
]

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


10. 运行服务器并测试

运行 Django 开发服务器:

bash 复制代码
python manage.py runserver

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


11. 部署

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


总结

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

相关推荐
GoodStudyAndDayDayUp2 分钟前
初入 python Django 框架总结
数据库·python·django
blues_C2 天前
十三、【核心功能篇】测试计划管理:组织和编排测试用例
vue.js·django·测试用例·drf·测试平台
恸流失2 天前
DJango项目
后端·python·django
编程大全3 天前
41道Django高频题整理(附答案背诵版)
数据库·django·sqlite
网安小张3 天前
解锁FastAPI与MongoDB聚合管道的性能奥秘
数据库·python·django
KENYCHEN奉孝3 天前
Pandas和Django的示例Demo
python·django·pandas
老胖闲聊3 天前
Python Django完整教程与代码示例
数据库·python·django
noravinsc3 天前
django paramiko 跳转登录
后端·python·django
践行见远3 天前
django之请求处理过程分析
数据库·django·sqlite
声声codeGrandMaster3 天前
Django之表格上传
后端·python·django