Django如何上傳圖片並對上傳圖片進行訪問


 

通過一個示例的完整演示過程,來學習django如何上傳圖片,以及對於media文件夾中的上傳圖片進行請求:

1.配置settings.py

 MEDIA_URL = '/media/'

 MEDIA_ROOT = os.path.join(BASE_DIR,'media').replace('\\','/')       #用於存儲和訪問上傳圖片的根目錄

 

2.配置urls.py

from django.conf.urls import include, url
from django.contrib import admin
from django.conf import settings
from django.views.static import serve

urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^',include('user.urls')),
url(r'media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT}), #如果需要訪問上傳圖片,則需要配置此路由
]

3.定義models.py
from django.db import models

class Goods(models.Model):
name = models.CharField(max_length=20)
img = models.ImageField(upload_to='goods/',default='goods/default.jpg',null=True,blank=True)
# upload_to這個屬性必須得有,后面是基於MEDIA_ROOT的相對路徑,上傳文件時,django會自動幫我們創建這一系列文件夾並存儲文件

4.定義views.py
# 上傳圖片
def upload_pic(request):
return render(request,'user/upload_pic.html')

# 對上傳圖片進行處理
def handle_pic(request):
    if request.method == 'POST':
goods_name = request.POST.get('goods_name')
pic_obj = request.FILES.get('picture') # 得到的是一個圖片對象

# 存儲圖片路徑(並非圖片文件)到數據庫,並自動將圖片資源存儲到指定目錄下
goods = Goods()
goods.name = goods_name
goods.img = pic_obj
goods.save()
return redirect('/show_pic/')
else:
return HttpResponse('上傳圖片失敗')
# 對上傳圖片進行顯示
def show_pic(request):
# 獲取商品名goods001所對應的圖片路徑
goods1 = Goods.objects.get(name='goods001')
img = goods1.img
context = {'img':img}
return render(request,'user/show_pic.html',context)

5.定義上傳頁模板upload_pic.html以及上傳頁頁面顯示
5.1 upload_pic.html:

 #  表單中有提交文件的控件時,提交方式必須是post,並且需要設置enctype屬性

5.2 上傳頁頁面顯示:

 6.上傳文件后圖片存儲路徑

 # media文件夾及其內部的文件夾和文件,均由django自動幫我們生成

 7.上傳文件后數據庫中的存儲內容

 # 存儲的是圖片相對於media文件夾的相對路徑,即models.py中定義的upload_to="goods/"+圖片文件名 

8.訪問media中上傳過的圖片

8.1 show_pic.html:

# 同靜態文件/static/訪問一樣,/media/后面直接寫上media文件夾下的文件名,就可以直接請求到上傳圖片資源

 
        

 8.2 頁面顯示

 
        

 # 在地址欄直接對media中的圖片進行訪問效果一樣,如下:(通常我們不會以這種方式直接請求)

 

 

 

 

 

 
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM