django中圖片的上傳和顯示


上傳圖片實際上是 把圖片存在服務器的硬盤中,將圖片存儲的路徑存在數據庫中。

 

1 首先要配置文件上傳的路徑:


1.1 建立靜態文件目錄

  在項目根目錄下 新建一個 static文件夾,下面再建立一個media文件夾,在media中建立一個與應用名相同的文件夾

  static為靜態文件目錄,里面是各個引用的靜態文件,包括js css  圖片 等等

  static下一般分為 js  css media 等

  js css 和media 下一般都根據應用去建立多個文件夾,不同應用去自己的文件夾中找

我的目錄是這樣的:

我的應用模塊是booktest

上傳的圖片都會保存到 static/media/booktest/中

 

1.2 配置靜態路徑

  到項目下的settings.py文件中,配置靜態文件路徑

  添加如下3個語句

1 # Static files (CSS, JavaScript, Images)
2 # https://docs.djangoproject.com/en/1.8/howto/static-files/
3 
4 STATIC_URL = '/myStatic/'
5 STATICFILES_DIRS = [ 6     os.path.join(BASE_DIR,'static'), 7 ] 8 MEDIA_ROOT=os.path.join(BASE_DIR,'static/media')

 

BASE_DIR代表整個項目的根目錄

STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static'), ]  代表指定根目錄下的static目錄是靜態文件目錄

MEDIA_ROOT=os.path.join(BASE_DIR,'static/media') 代表上傳文件的目錄是static/media

STATIC_URL = '/myStatic/' 代表 我們在編程的時候,用到靜態路徑的時候 用/myStatic/ 來找到靜態文件的目錄

 

2 建立一個數據庫,用於存儲上傳的圖片存在服務器的哪個路徑下

 在模型中建立圖片的模型類並遷移

#上傳圖片的模型類
class Pictures(models.Model): pic = models.ImageField(upload_to='booktest/') def __str__(self): return self.pic

 遷移命令:

生成遷移文件: python manage.py makemigrations

執行遷移: python manage.py migrate

 

 

圖片的上傳:

 

1 用戶上傳圖片:
1 前端的form表單input上傳:

前端模板代碼:

 1 <body>
 2 <form action="/upload/" method="post" enctype="multipart/form-data" >
 3  {% csrf_token %}  4  上傳:  5     <input type="file" name="picture">
 6     <input type="submit" value="上傳">
 7 
 8 </form>
 9 
10 
11 </body>

 

2 url映射部分 省略......

 

3 視圖view的代碼:

 1 # 上傳圖片
 2 from django.conf import settings  3 from .models import Pictures  4 # 返回上傳圖片的頁面
 5 def getUpload(request):  6     return render(request,'booktest/upload.html')  7 
 8 # 發來表單 實現上傳功能
 9 def upload(request): 10     # 從請求當中 獲取文件對象
11     f1 = request.FILES.get('picture') 12     # 利用模型類 將圖片要存放的路徑存到數據庫中
13     p = Pictures() 14     p.pic = "booktest/" + f1.name 15  p.save() 16     # 在之前配好的靜態文件目錄static/media/booktest 下 新建一個空文件
17     # 然后我們循環把上傳的圖片寫入到新建文件當中
18     fname = settings.MEDIA_ROOT + "/booktest/" + f1.name 19     with open(fname,'wb') as pic: 20         for c in f1.chunks(): 21  pic.write(c) 22     return HttpResponse("上傳成功")

 

 

這個時候我們在前段上傳提交后,

在靜態文件夾下多了一個圖片文件

 數據庫中插入了一條信息,存儲圖片存放路徑。

 

 

 

2 管理頁面上傳圖片

 在前台申請 127.0.0.1:8000/admin登陸后 上傳圖片

1 首先在admin.py中注冊一下上傳圖片的模型類

1 from django.contrib import admin 2 from .models import Pictures 3 # Register your models here.
4 admin.site.register(Pictures)

 

 2 登陸 xxxx:8000/admin/  登陸后 看到我們的數據庫表,點開直接上傳就可以。

上傳之后我們就能發現 數據庫多了一條數據,本地靜態文件路徑也多了一個圖片。

 

創建管理賬戶的命令: python manage.py createsuperuser 

 

 

 

圖片的顯示:


原理是從數據庫中取到路徑,然后再去路徑找文件,返回給前台模板

views視圖中的代碼:

1 # 顯示圖片
2 def show_pic(request): 3     pic_obj = Pictures.objects.get(id=1) 4     return render(request,'booktest/show_pic.html',{'pic_obj':pic_obj})

pic利用模型類取到id為1的圖片對象,把這個圖片對象送給模板

 

模板中代碼:

1 <body>
2     <h1>顯示圖片</h1>
3 
4     <img src="/myStatic/media/{{ pic_obj.pic }}" alt="">
5 </body>

 

pic_obj.pic: 之前建立了模型類有一個pic屬性 是 ImageField類型,upload_to 指定了上傳文件的目錄

 

 

這里利用這個對象 

 django自動幫我們去靜態路徑下取到圖片對象 放到前台。

 

 

 


免責聲明!

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



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