python管理图片_Django 管理图片
Django 管理圖片
圖片的上傳
模型定義
model.py
class Image(models.Model):
image = models.ImageField(upload_to='images/%Y%m%d')
class Meta:
db_table = 'image'
verbose_name = '圖片'
verbose_name_plural = verbose_name
注冊到管理后臺
admin.py
@admin.register(Image)
class ImageAdmin(admin.ModelAdmin):
list_display = ('image',)
這時,在后臺就可以實現圖片的上傳了,顯然不是我們想要的,我們是想在前端HTML頁面上實現圖片上傳。
接下來:
前端頁面
{% csrf_token %}
enctype=“multipart/form-data” 允許表單提交文件,必須寫這一項。multiple=“multiple” 允許一次提交多個文件。
這里只需要選擇圖片的時候,Windows電腦按著Ctrl鍵。
views.py
def uploads_files(request):
if request.method == 'POST':
files = request.FILES.getlist('file_field')
for f in files:
file = Image(image=f)
file.save()
return redirect(reverse('article:add_article'))
else:
return
路由配置
path('uploads/', views.uploads_files, name='uploads'),
setting.py必須配置
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
運行后,打開上傳的圖片頁面,這里我是在博客中插入的,可以根據自己的需求更改路徑.
支持多張圖片同時上傳呀。
admin后臺管理圖片。
在后臺管理圖片的時候,雖然可以查看圖片,不過需要點擊,很麻煩。
優化:
修改model.py
增加部分內容
from django.utils.html import format_html
class Image(models.Model):
....
....
def admin_image(self):
return format_html(
'',
self.image.url,
)
admin_image.short_description = u'圖片'
admin_image.allow_tags = True
admin.py后臺添加字段admin_image
@admin.register(Image)
class ImageAdmin(admin.ModelAdmin):
list_display = ('image', 'admin_image',)
這樣,我們就可以實現后臺顯示圖片的縮略圖了
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-pKzj6zKf-1601751584640)(/pictures/Django/admin_up_img.jpg)]
文件或圖片的上傳位置和刪除問題
你以為完了嗎,不,還能優化,不信你刪除一下試試,只是數據沒了,但是文件還存在,這種情況需要優化。
model.py增加
from django.db.models.signals import post_delete
from django.dispatch import receiver
import os
# 重寫刪除文件功能,數據刪除的時候,文件也跟隨刪除
@receiver(post_delete, sender=Image)
def delete_upload_files(sender, instance, **kwargs):
files = getattr(instance, 'image', '')
if not files:
return
fname = os.path.join(settings.MEDIA_ROOT, files.name)
if os.path.isfile(fname):
os.remove(fname)
重寫上傳位置
def upload_to_con(instance, filename):
return '/'.join(
[MEDIA_ROOT, 'article_insert' + instance.image.url, filename])
class Image(models.Model):
image = models.ImageField(upload_to=upload_to_con)
遷移數據,就ok了。
原文鏈接:https://blog.csdn.net/qq_42164596/article/details/108915712
總結
以上是生活随笔為你收集整理的python管理图片_Django 管理图片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3是unicode还是utf
- 下一篇: centos7 mysql读写监控_Ce