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