当前位置: 代码网 > it编程>前端脚本>Python > Django+simpleui实现文件上传预览功能(详细过程)

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

2025年02月11日 Python 我要评论
在 django 中,文件通常不会直接存储到 mysql 数据库中,而是存储在文件系统或云存储中,数据库中只存储文件的路径或元数据。1. 创建 django 项目和应用如果还没有项目和应用,先创建一个

在 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文件上传预览内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com