[Django] Le backend de stockage personnalisé renvoie le lien URL de l'image complète

Lorsque nous stockons des images dans Django, nous ne stockons pas directement les images, mais stockons l'identifiant unique de l'image, puis obtenons l'image via l'identifiant. Par exemple, la classe de modèle suivante a un champ image et le type de champ est ImageField

class SKUImage(BaseModel):
    sku = models.ForeignKey(SKU, on_delete=models.CASCADE, verbose_name='sku')
    image = models.ImageField(verbose_name='图片')  # 存储图片

    class Meta:
        db_table = 'tb_sku_image'

    def __str__(self):
        return '%s %s' % (self.sku.name, self.id)

Le type ImageField a un attribut url, qui renvoie le lien URL de l'image (c'est-à-dire l'identifiant unique). Le
Insérez la description de l'image ici
im.image.url actuel est simplement l'identifiant de l'image d'origine. Ce que nous voulons, c'est un lien URL complet avec un nom de domaine. , Nous devons donc personnaliser le backend de stockage et réécrire la fonction url () pour renvoyer le lien image complet

1. Backend de stockage personnalisé

Créez un nouveau fichier py, tel que fastdfs.py,
créez une nouvelle classe, héritez de Storage et réécrivez la méthode url (), en épissant le paramètre de nom de la méthode avec une chaîne personnalisée, puis retournez

from django.core.files.storage import Storage

class FastDFSStorage(Storage):
    def _open(self,name,mode='rb'):
        # 打开django本地文件
        pass
    def _save(self,name,content,max_length=None):
        # 上传图片
        pass
    # 给返回的图片标识加上前缀
    def url(self, name):
        return "http://image.mysite.site:8888/" + name

2. Modifiez le fichier de configuration

Modifiez le fichier de configuration pour indiquer à Django d'utiliser notre backend de stockage personnalisé

# 指定自定义的Django文件存储类
DEFAULT_FILE_STORAGE = 'xxxxxx.utils.fastdfs.FastDFSStorage' 

Autres opérations similaires

[Django] Backend d'authentification personnalisé ModelBackend complète la connexion à la boîte aux lettres multi-numéros de téléphone

[Django] Créer un utilisateur, hériter de la classe de modèle utilisateur personnalisé AbstractUser

Je suppose que tu aimes

Origine blog.csdn.net/qq_39147299/article/details/108538974
conseillé
Classement