在 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 后台界面,提升用户体验。