Django文件上傳完整教程

一、設置路徑

首先,在settings.py 文件的中設置 MEDIA_ROOT 和 MEDIA_URL 兩個參數。其中MEDIA_ROOT 表示文件存儲的根目錄,MEDIA_URL 表示通過瀏覽器訪問這些文件的URL前綴。

 MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

MEDIA_URL = '/media/'

二、建表

為了保存上傳的文件,我們需要在項目中定義一個文件模型。在models.py文件中進行定義。此處以保存圖片文件為例:

 class Image(models.Model):
    
    image = models.ImageField(upload_to='images/')

    def __str__(self):
        return f'{self.id}'

其中的 upload_to 參數用於設置文件存儲的子目錄。如果你不需要對文件進行二次分類,則可以直接寫為 upload_to=’/’

三、使用表單進行上傳

在模板文件中編寫文件上傳表單。

 <form method="POST" enctype="multipart/form-data" action="{% url 'upload' %}">
    {% csrf_token %}
    <input type="file" name="image">
    <input type="submit" value="上傳">
</form>

四、定義視圖

使用Django自帶的視圖函數進行文件上傳處理。首先需要引用兩個庫:from django.shortcuts import render 和 from django.conf import settings

然後可以定義一個新的視圖函數進行文件上傳處理:

 def upload(request):
    if request.method == 'POST':
        image = request.FILES.get('image')
        
        if image:
            new_image = Image()
            new_image.image = image
            new_image.save()

            return HttpResponse('文件上傳成功!')
    else:
        return render(request, 'upload.html')

五、渲染結果

在模板文件中渲染上傳結果。以下代碼用於展示上傳成功的圖片:

 <div>
    {% for img in images %}
        <img src="{{ img.image.url }}" height="300" />
    {% endfor %}
</div>

六、完整代碼示例

 # settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

MEDIA_URL = '/media/'

# models.py
class Image(models.Model):
    
    image = models.ImageField(upload_to='images/')

    def __str__(self):
        return f'{self.id}'

# upload.html
<form method="POST" enctype="multipart/form-data" action="{% url 'upload' %}">
    {% csrf_token %}
    <input type="file" name="image">
    <input type="submit" value="上傳">
</form>
<div>
    {% for img in images %}
        <img src="{{ img.image.url }}" height="300" />
    {% endfor %}
</div>

# views.py
from django.shortcuts import render
from django.conf import settings
from .models import Image
from django.http import HttpResponse

def upload(request):
    if request.method == 'POST':
        image = request.FILES.get('image')
        
        if image:
            new_image = Image()
            new_image.image = image
            new_image.save()

            return HttpResponse('文件上傳成功!')
    else:
        images = Image.objects.all()
        return render(request, 'upload.html', {'images': images})

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/238790.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:13
下一篇 2024-12-12 12:13

相關推薦

  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變量類型,而是在變量第一次賦值時自動識別該變量的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬盤。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • 打造照片漫畫生成器的完整指南

    本文將分享如何使用Python編寫一個簡單的照片漫畫生成器,本文所提到的所有代碼和技術都適用於初學者。 一、環境準備 在開始編寫代碼之前,我們需要準備一些必要的環境。 首先,需要安…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python中文版下載官網的完整指南

    Python是一種廣泛使用的編程語言,具有簡潔、易讀易寫等特點。Python中文版下載官網是Python學習和使用過程中的重要資源,本文將從多個方面對Python中文版下載官網進行…

    編程 2025-04-29
  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • 服務器安裝Python的完整指南

    本文將為您提供服務器安裝Python的完整指南。無論您是一位新手還是經驗豐富的開發者,您都可以通過本文輕鬆地完成Python的安裝過程。以下是本文的具體內容: 一、下載Python…

    編程 2025-04-29
  • 猿編程python免費全套教程400集

    想要學習Python編程嗎?猿編程python免費全套教程400集是一個不錯的選擇!下面我們來詳細了解一下這個教程。 一、課程內容 猿編程python免費全套教程400集包含了從P…

    編程 2025-04-29

發表回復

登錄後才能評論