欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django實(shí)現(xiàn)文件上傳下載功能

 更新時(shí)間:2019年10月06日 10:25:04   作者:羅漢爺  
這篇文章主要為大家詳細(xì)介紹了Django實(shí)現(xiàn)文件上傳下載功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

項(xiàng)目介紹

最近學(xué)習(xí)django,通過文件上傳下載這個(gè)小項(xiàng)目,總結(jié)下常用的知識(shí)點(diǎn)。
做這個(gè)案例我有以下需求:

1.要支持一次上傳多個(gè)文件

2.支持上傳后記錄上傳的數(shù)據(jù)以及列表展示

3.支持下載和刪除文件記錄

效果展示

數(shù)據(jù)庫(kù)記錄

開發(fā)步驟

創(chuàng)建項(xiàng)目:

django-admin startproject file_upload
cd file_upload
python manage.py startapp uploader

目錄結(jié)構(gòu):

0.settings.py

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False

1.urls.py

父:

from django.contrib import admin
from django.urls import path, include
 
urlpatterns = [
 path('admin/', admin.site.urls),
 path('uploader/', include('uploader.urls'))
]

子:

from django.contrib import admin
from django.urls import path, include
from . import views
 
app_name = 'uploader'
 
urlpatterns = [
 path('', views.upload, name='upload'), # 上傳
 path('list/', views.list), # 列表
 path('download/<id>', views.download, name='download'), # 下載
 path('delete/<id>', views.delete, name='delete'), # 刪除
]

2.models.py

from django.db import models
from django.utils import timezone
 
'''
文件記錄
'''
class FileInfo(models.Model):
 file_name = models.CharField(max_length=500)
 file_size = models.DecimalField(max_digits=10, decimal_places=0)
 file_path = models.CharField(max_length=500)
 upload_time = models.DateTimeField(default=timezone.now())

3.forms.py

from django import forms
 
'''
上傳表單
'''
class UploadForm(forms.Form):
 file = forms.FileField(
 widget=forms.ClearableFileInput(attrs={'multiple': True}), # 支持多文件上傳
 label='選擇文件...',
 help_text='最大100M'
 )

4.views.py

from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.http import HttpResponseRedirect
from django.http import FileResponse
from django.template import RequestContext
from django.urls import reverse
from django.utils.http import urlquote
 
from .models import FileInfo
from .forms import UploadForm
import os
 
 
# 上傳文件
def upload(request):
 # Handle file upload
 if request.method == 'POST':
 form = UploadForm(request.POST, request.FILES)
 if form.is_valid():
  files = request.FILES.getlist('file')
  for f in files:
  file_info = FileInfo(file_name=f.name, file_size=1 if 0 < f.size < 1024 else f.size / 1024, file_path=os.path.join('D:\\upload', f.name))
  file_info.save()
  # 上傳
  destination = open(os.path.join("D:\\upload", f.name), 'wb+')
  for chunk in f.chunks():
   destination.write(chunk)
  destination.close()
 
  # 返回上傳頁(yè)
  return HttpResponseRedirect('/uploader/list')
 else:
 form = UploadForm() # A empty, unbound form
 return render(request, 'uploader/upload.html', {'form': form})
 
 
# 文件列表
def list(request):
 file_infos = FileInfo.objects.all()
 
 return render(request, 'uploader/list.html', {'file_infos': file_infos})
 
 
# 下載文件
def download(request, id):
 file_info = FileInfo.objects.get(id=id)
 print('下載的文件名:' + file_info.file_name)
 file = open(file_info.file_path, 'rb')
 response = FileResponse(file)
 response['Content-Disposition'] = 'attachment;filename="%s"' % urlquote(file_info.file_name)
 return response
 
 
# 刪除文件
def delete(request, id):
 file_info = FileInfo.objects.get(id=id)
 file_info.delete()
 file_infos = FileInfo.objects.all()
 
 return HttpResponseRedirect('/uploader/list')

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于Django與ajax之間的json傳輸方法

    基于Django與ajax之間的json傳輸方法

    今天小編就為大家分享一篇基于Django與ajax之間的json傳輸方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-05-05
  • python實(shí)現(xiàn)將Excel文件轉(zhuǎn)換為JSON文件

    python實(shí)現(xiàn)將Excel文件轉(zhuǎn)換為JSON文件

    在數(shù)據(jù)處理和分析中,Excel和JSON是兩種常見的數(shù)據(jù)格式,本文將詳細(xì)介紹如何使用Python將Excel文件轉(zhuǎn)換為JSON文件,我們將使用pandas庫(kù),這是一個(gè)強(qiáng)大的數(shù)據(jù)分析工具,能夠方便地讀取和處理各種數(shù)據(jù)格式,需要的朋友可以參考下
    2024-07-07
  • Django 使用logging打印日志的實(shí)例

    Django 使用logging打印日志的實(shí)例

    下面小編就為大家分享一篇Django 使用logging打印日志的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-04-04
  • 提升Python編碼能力的3個(gè)重要概念

    提升Python編碼能力的3個(gè)重要概念

    這篇文章主要給大家分享的是提升Python編碼能力的3個(gè)重要概念,圍繞提升Python編碼的相關(guān)自資料上下文管理器、類型提示、淺拷貝和深拷貝等內(nèi)容展開文章,需要的小伙伴可以參考一下
    2022-02-02
  • python遞歸打印某個(gè)目錄的內(nèi)容(實(shí)例講解)

    python遞歸打印某個(gè)目錄的內(nèi)容(實(shí)例講解)

    下面小編就為大家?guī)?lái)一篇python遞歸打印某個(gè)目錄的內(nèi)容(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-08-08
  • 利用Numba與Cython結(jié)合提升python運(yùn)行效率詳解

    利用Numba與Cython結(jié)合提升python運(yùn)行效率詳解

    近些年來(lái), Numba和Cython在數(shù)學(xué)科學(xué)界得到了廣泛的關(guān)注。它們都提供了一種加速CPU密集型任務(wù)的方法,但以不同的方式。本文描述了它們之間體系結(jié)構(gòu)的差異
    2021-09-09
  • NumPy隨機(jī)數(shù)據(jù)分布與Seaborn可視化詳解

    NumPy隨機(jī)數(shù)據(jù)分布與Seaborn可視化詳解

    數(shù)據(jù)分布是指數(shù)據(jù)集中所有可能值出現(xiàn)的頻率,并用概率來(lái)表示,它描述了數(shù)據(jù)取值的可能性,Seaborn 是一個(gè)基于 Matplotlib 的 Python 數(shù)據(jù)可視化庫(kù),用于創(chuàng)建統(tǒng)計(jì)圖表,本文就給大家詳細(xì)的介紹一下NumPy隨機(jī)數(shù)據(jù)分布與Seaborn可視化,需要的朋友可以參考下
    2024-05-05
  • python求解三角形第三邊長(zhǎng)實(shí)例

    python求解三角形第三邊長(zhǎng)實(shí)例

    這篇文章主要介紹了python求解三角形第三邊長(zhǎng)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python實(shí)現(xiàn)一元一次與一元二次方程求解

    Python實(shí)現(xiàn)一元一次與一元二次方程求解

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)一元一次與一元二次方程的求解,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06
  • 如何在C++中調(diào)用Python

    如何在C++中調(diào)用Python

    雖然現(xiàn)在Python編程語(yǔ)言十分的火爆,但是實(shí)際上非要用一門語(yǔ)言去完成所有的任務(wù),并不是說(shuō)不可以,而是不合適。在一些特定的、對(duì)于性能要求比較高的場(chǎng)景,還是需要用到傳統(tǒng)的C++來(lái)進(jìn)行編程的。本文將用C++的代碼去調(diào)用Python函數(shù)中實(shí)現(xiàn)的一些功能
    2021-05-05

最新評(píng)論