IT俱乐部 Python Django+simpleui实现文件上传预览功能(详细过程)

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

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

1. 创建 Django 项目和应用

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

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

2. 配置 MySQL 数据库

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

1
2
3
4
5
6
7
8
9
10
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydatabase',  # 数据库名称
        'USER': 'root',        # 数据库用户名
        'PASSWORD': 'password',# 数据库密码
        'HOST': 'localhost',   # 数据库主机
        'PORT': '3306',        # 数据库端口
    }
}

确保已安装 MySQL 客户端库:

1
pip install mysqlclient

3. 创建模型

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

1
2
3
4
5
6
7
8
9
10
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 中创建一个表单来处理文件上传:

1
2
3
4
5
6
from django import forms
from .models import UploadedFile
class UploadFileForm(forms.ModelForm):
    class Meta:
        model = UploadedFile
        fields = ['name', 'file']

5. 创建视图

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 路由:

1
2
3
4
5
6
7
from django.urls import path
from . import views
urlpatterns = [
    path('upload/', views.upload_file, name='upload_file'),
    path('preview//', views.preview_file, name='preview_file'),
    path('download//', views.download_file, name='download_file'),
]

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

1
2
3
4
5
6
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 中配置媒体文件的存储路径:

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

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

1
2
3
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(文件上传页面)

1
<title>Upload File</title><h1>Upload File</h1>

{% csrf_token %}
{{ form.as_p }}

upload_success.html(上传成功页面)

1
2
<title>Upload Success</title><h1>File Uploaded Successfully</h1>
<a href="%7B%%20url%20'upload_file'%20%%7D" rel="external nofollow">Upload another file</a>

preview.html(文件预览页面)

1
2
3
<title>Preview File</title><h1>{{ file.name }}</h1>
<p>Uploaded at: {{ file.uploaded_at }}</p>
<a href="%7B%%20url%20'download_file'%20file.id%20%%7D" rel="external nofollow">Download</a>

9. 配置 SimpleUI

settings.py 中安装并配置 SimpleUI:

1
2
3
4
5
6
INSTALLED_APPS = [
    ...
    'simpleui',
    'myapp',
    ...
]

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

10. 运行服务器并测试

运行 Django 开发服务器:

1
python manage.py runserver

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

11. 部署

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

总结

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

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

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/code/python/14907.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部