91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django中刪除upload_to文件的方法

發布時間:2021-05-08 09:59:04 來源:億速云 閱讀:241 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關Django中刪除upload_to文件的方法的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

新版Django在admin后臺直接刪除一條數據時,file = models.FileField(upload_to=‘file')上傳的文件并不會刪除,以下為解決方法:

在model.py加入:

from django.db.models.signals import pre_delete
from django.dispatch.dispatcher import receiver
@receiver(pre_delete, sender=AddDateModel)
def mymodel_delete(sender, instance, **kwargs):
  # Pass false so FileField doesn't save the model.
  instance.file.delete(False)

補充知識:django之重寫FileField字段的保存實例

重寫FileField字段的保存,以重命名為例

settings.py添加配置

settings.py中末尾添加配置如下,指定指向的操作文件中的類:

# 文件上傳重寫
DEFAULT_FILE_STORAGE = "app.customfilefield.storage.FileStorage"

添加FileStorage

app應用下添加python包customfilefield,注意有init.py文件,customfilefield下創建py文件storage.py,文件內容為:

storage.py

# -*-coding:utf-8 -*-
from django.core.files.storage import FileSystemStorage
from django.http import HttpResponse
from django.conf import settings
import os, time, random
from app import utils
 
class FileStorage(FileSystemStorage):
  def __init__(self, location=settings.MEDIA_ROOT, base_url=settings.MEDIA_URL):
    #初始化
    super(FileStorage, self).__init__(location, base_url)
 
  #重寫 _save方法
  def _save(self, name, content):
    #文件擴展名
    ext = os.path.splitext(name)[1]
    #文件目錄
    d = os.path.dirname(name)
    # 定義文件名,源文件名,避開系統定義的隨機字符串追加,所以避開不用name字段
    end = utils.find_last(str(content), ".")
    filename = ""
    if end != -1:
      filename = str(content)[:end]
    # 定義文件名,年月日時分秒隨機數
    fn = time.strftime("%Y%m%d%H%M%S")
    fn = fn + "_%d" % random.randint(0,100)
    #重寫合成文件名
    name = os.path.join(d, filename + fn + ext)
    #調用父類方法
    return super(FileStorage, self)._save(name, content)

utils.py

# 獲取字符串中指定字符最后一次出現的位置
def find_last(string,str):
  last_position=-1
  while True:
    position=string.find(str,last_position+1)
    if position==-1:
      return last_position
    last_position=position

如此,最后上傳的文件名為原文件名加上年月日時分秒加上0-100的隨機數保存,效果如下:

Django中刪除upload_to文件的方法

感謝各位的閱讀!關于“Django中刪除upload_to文件的方法”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石嘴山市| 沈阳市| 黎川县| 长宁县| 咸阳市| 壤塘县| 渝北区| 建瓯市| 泰兴市| 通海县| 博爱县| 鞍山市| 日喀则市| 竹溪县| 博湖县| 绩溪县| 鹤岗市| 桑植县| 普定县| 体育| 永城市| 宁海县| 西乌珠穆沁旗| 泰和县| 阳江市| 长治市| 固阳县| 兴化市| 临沭县| 丹阳市| 东海县| 保亭| 昌乐县| 大姚县| 苏州市| 芜湖市| 英吉沙县| 绥棱县| 延安市| 阿坝县| 阜新市|