目录
1. 创建 Django 项目和应用2. 配置 MySQL 数据库3. 创建模型4. 创建表单5. 创建视图6. 配置 URL7. 配置媒体文件8. 创建模板9. 配置 SimpleUI10. 运行服务器并测试11. 部署总结在 Django 中,文件通常不会直接存储到 MySQL 数据库中,而是存储在文件系统或云存储中,数据库中只存储文件的路径或元数据。
1. 创建 Django 项目和应用
如果还没有项目和应用,先创建一个:
django-admin startproject myprojectcd myprojectpython 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 modelsclass 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 formsfrom .models import UploadedFileclass UploadFileForm(forms.ModelForm): class Meta: model = UploadedFile fields = ['name', 'file']
5. 创建视图
在 myapp/views.py
中创建视图来处理文件的上传、预览和下载:
from django.shortcuts import render, get_object_or_404from django.http import HttpResponsefrom .models import UploadedFilefrom .forms import UploadFileFormimport osdef 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 pathfrom . import viewsurlpatterns = [ 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 adminfrom django.urls import path, includeurlpatterns = [ 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 settingsfrom django.conf.urls.static import staticurlpatterns += 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)来存储上传的文件。
总结
通过