此文章以上傳/加載圖片為例進行說明如何在DJango中上傳和加載文件。
1.安裝插件Pillow
Pillow是一個專門處理圖片的插件
pip install Pillow
2.添加media目錄
上傳的圖片或文件都屬于外部資源,保存這類資源,通常的做法是建一個名為media的文件夾,用來存儲外部上傳的資源。
14.png
3.model中添加存儲圖片路徑的屬性
要存儲一個文件,實質是把文件的路徑存儲在數據庫中,通過訪問路徑,加載文件信息。DJango中存儲圖片用ImageFiled數據類型,圖片路徑存儲格式:目錄/圖片名稱。通過參數upload_to指定目錄,此目錄不需要提前建立,在遷移數據庫時會自動在media目錄下創建對應的文件夾。
實例:
i_image = models.ImageField(upload_to='upload', null=True)
目錄:
image.png
圖片存儲在數據庫中的路徑如下:upload/圖片名稱
2.png
4.遷移數據庫
python manage.py makemigrations
python manage.py migrate
5.頁面上傳圖片
在html中,上傳文件用file類型
上傳圖片.png
頁面效果如下:
頁面效果.png
6.獲取頁面數據,存入數據庫
知識點:
a.request.FILES.get()
獲取圖片信息,用request的FILES方法
StudentInfo.objects.create(
i_addr=request.POST.get('addr'),
s_id=request.POST.get('stu_id'),
# 獲取圖片用FILES
i_image=request.FILES.get('image')
)
7.頁面加載圖片
注意:img的路徑不是直接獲取的數據庫中圖片的路徑,而是需要在數據庫路徑前面加上/media/,這是因為模型中設置的路徑是從media目錄下開始,所以在加載圖片時需要在前面加上media目錄。
<img src="/media/{{ i.studentinfo.i_image }}" width="100px" height="100px">
8.在setting.py文件中完成路徑配置
配置上傳文件路徑,upload中沒有存放文件的主目錄media,所以需要配置MEDIA_URL和MEDIA_ROOT,這樣在上傳文件時,程序才知道保存在具體的路徑。
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
9.配置主目錄的urls.py文件
通過如下配置,把MEDIA配置成靜態文件。
from django.contrib.staticfiles.urls import static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)