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
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] Créer un utilisateur, hériter de la classe de modèle utilisateur personnalisé AbstractUser