Django+simpleui實現(xiàn)文件上傳預覽功能(詳細過程)
在 Django 中,文件通常不會直接存儲到 MySQL 數(shù)據(jù)庫中,而是存儲在文件系統(tǒng)或云存儲中,數(shù)據(jù)庫中只存儲文件的路徑或元數(shù)據(jù)。
1. 創(chuàng)建 Django 項目和應(yīng)用
如果還沒有項目和應(yīng)用,先創(chuàng)建一個:
django-admin startproject myproject cd myproject python manage.py startapp myapp
2. 配置 MySQL 數(shù)據(jù)庫
在 settings.py 中配置 MySQL 數(shù)據(jù)庫連接:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydatabase', # 數(shù)據(jù)庫名稱
'USER': 'root', # 數(shù)據(jù)庫用戶名
'PASSWORD': 'password',# 數(shù)據(jù)庫密碼
'HOST': 'localhost', # 數(shù)據(jù)庫主機
'PORT': '3306', # 數(shù)據(jù)庫端口
}
}確保已安裝 MySQL 客戶端庫:
pip install mysqlclient
3. 創(chuàng)建模型
在 myapp/models.py 中創(chuàng)建一個模型來存儲文件信息:
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. 創(chuàng)建表單
在 myapp/forms.py 中創(chuàng)建一個表單來處理文件上傳:
from django import forms
from .models import UploadedFile
class UploadFileForm(forms.ModelForm):
class Meta:
model = UploadedFile
fields = ['name', 'file']5. 創(chuàng)建視圖
在 myapp/views.py 中創(chuàng)建視圖來處理文件的上傳、預覽和下載:
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 中包含應(yīng)用的 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. 創(chuàng)建模板
在 myapp/templates/ 目錄下創(chuàng)建以下模板文件:
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. 運行服務(wù)器并測試
運行 Django 開發(fā)服務(wù)器:
python manage.py runserver
訪問 http://127.0.0.1:8000/myapp/upload/ 進行文件上傳、預覽和下載的測試。
11. 部署
在生產(chǎn)環(huán)境中,確保配置好靜態(tài)文件和媒體文件的處理方式,并考慮使用云存儲服務(wù)(如 AWS S3)來存儲上傳的文件。
總結(jié)
通過以上步驟,可以實現(xiàn)管理員上傳文件并將文件信息存儲到 MySQL 數(shù)據(jù)庫,同時支持前端預覽和下載的功能。SimpleUI 用于美化 Django 后臺界面,提升用戶體驗。
到此這篇關(guān)于Django+simpleui實現(xiàn)文件上傳預覽功能的文章就介紹到這了,更多相關(guān)Django simpleui文件上傳預覽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python切片、strip()和LLM接口調(diào)用的實用技巧分享
這篇教程詳細介紹了Python中實用的List、切片操作和strip()方法,以及如何通過簡單的代碼調(diào)用LLM接口實現(xiàn)AI功能,適合Python初學者和進階者學習,需要的朋友可以參考下2026-05-05
pycharm創(chuàng)建臨時文件scatch file的方法詳解
JetBrains PyCharm是一種Python IDE,其帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高其效率的工具,這篇文章主要介紹了pycharm創(chuàng)建臨時文件scatch file的方法,需要的朋友可以參考下2024-07-07
Java中MultipartFile與File互轉(zhuǎn)的實現(xiàn)
本文主要介紹了Java中MultipartFile與File互轉(zhuǎn)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03
解決更新tensorflow后應(yīng)用tensorboard報錯的問題
這篇文章主要介紹了解決更新tensorflow后應(yīng)用tensorboard報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
一文詳解TensorFlow與PyTorch有什么關(guān)聯(lián)
TensorFlow和PyTorch是兩大主流深度學習框架,而Transformer是一種革命性的神經(jīng)網(wǎng)絡(luò)架構(gòu),這篇文章主要介紹了TensorFlow與PyTorch有什么關(guān)聯(lián)的相關(guān)資料,文中介紹的非常詳細,需要的朋友可以參考下2025-12-12
python OpenCV學習筆記直方圖反向投影的實現(xiàn)
這篇文章主要介紹了python OpenCV學習筆記直方圖反向投影的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02

