一、設置路徑
首先,在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-hk/n/238790.html