Django+simpleui實(shí)現(xiàn)文件上傳預(yù)覽功能(詳細(xì)過程)
在 Django 中,文件通常不會(huì)直接存儲(chǔ)到 MySQL 數(shù)據(jù)庫中,而是存儲(chǔ)在文件系統(tǒng)或云存儲(chǔ)中,數(shù)據(jù)庫中只存儲(chǔ)文件的路徑或元數(shù)據(jù)。
1. 創(chuàng)建 Django 項(xiàng)目和應(yīng)用
如果還沒有項(xiàng)目和應(yīng)用,先創(chuàng)建一個(gè):
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ù)庫主機(jī) 'PORT': '3306', # 數(shù)據(jù)庫端口 } }
確保已安裝 MySQL 客戶端庫:
pip install mysqlclient
3. 創(chuàng)建模型
在 myapp/models.py
中創(chuàng)建一個(gè)模型來存儲(chǔ)文件信息:
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="上傳時(shí)間") def __str__(self): return self.name class Meta: verbose_name = "上傳文件" verbose_name_plural = "上傳文件"
4. 創(chuàng)建表單
在 myapp/forms.py
中創(chuàng)建一個(gè)表單來處理文件上傳:
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)建視圖來處理文件的上傳、預(yù)覽和下載:
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
中包含應(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
中配置媒體文件的存儲(chǔ)路徑:
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
(文件預(yù)覽頁面)
<!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 會(huì)自動(dòng)美化 Django 后臺(tái)界面,你可以在 settings.py
中進(jìn)一步配置 SimpleUI 的主題和其他選項(xiàng)。
10. 運(yùn)行服務(wù)器并測(cè)試
運(yùn)行 Django 開發(fā)服務(wù)器:
python manage.py runserver
訪問 http://127.0.0.1:8000/myapp/upload/
進(jìn)行文件上傳、預(yù)覽和下載的測(cè)試。
11. 部署
在生產(chǎn)環(huán)境中,確保配置好靜態(tài)文件和媒體文件的處理方式,并考慮使用云存儲(chǔ)服務(wù)(如 AWS S3)來存儲(chǔ)上傳的文件。
總結(jié)
通過以上步驟,可以實(shí)現(xiàn)管理員上傳文件并將文件信息存儲(chǔ)到 MySQL 數(shù)據(jù)庫,同時(shí)支持前端預(yù)覽和下載的功能。SimpleUI 用于美化 Django 后臺(tái)界面,提升用戶體驗(yàn)。
到此這篇關(guān)于Django+simpleui實(shí)現(xiàn)文件上傳預(yù)覽功能的文章就介紹到這了,更多相關(guān)Django simpleui文件上傳預(yù)覽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 實(shí)現(xiàn)數(shù)組相減示例
今天小編就為大家分享一篇Python 實(shí)現(xiàn)數(shù)組相減示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python如何利用IMAP實(shí)現(xiàn)郵箱客戶端功能
IMAP是另一種讀取電子郵件的協(xié)議,IMAP是讀取郵件服務(wù)器的電子郵件與公布欄信息的方法,也就是說IMAP 允許客戶端的郵件程序存取遠(yuǎn)程的信息,這篇文章主要給大家介紹了關(guān)于Python如何利用IMAP實(shí)現(xiàn)郵箱客戶端功能的相關(guān)資料,需要的朋友可以參考下2021-09-09Python設(shè)計(jì)模式之裝飾模式實(shí)例詳解
這篇文章主要介紹了Python設(shè)計(jì)模式之裝飾模式,結(jié)合實(shí)例形式詳細(xì)分析了裝飾模式的概念、原理并結(jié)合Python實(shí)例形式分析了裝飾模式的相關(guān)使用技巧,需要的朋友可以參考下2019-01-01python基礎(chǔ)學(xué)習(xí)之如何對(duì)元組各個(gè)元素進(jìn)行命名詳解
python的元祖和列表類似,不同之處在于元祖的元素不能修改,下面這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)學(xué)習(xí)之如何對(duì)元組各個(gè)元素進(jìn)行命名的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07Python利用pyHook實(shí)現(xiàn)監(jiān)聽用戶鼠標(biāo)與鍵盤事件
這篇文章主要介紹了Python利用pyHook實(shí)現(xiàn)監(jiān)聽用戶鼠標(biāo)與鍵盤事件,很有實(shí)用價(jià)值的一個(gè)技巧,需要的朋友可以參考下2014-08-08