Dans Django, le téléchargement de fichier consiste à "définir l'adresse dans la base de données" et à "mettre le fichier réel dans la zone multimédia"! Il existe un type qui gère le type Blob pour le moment, mais en ce qui concerne le fonctionnement, il est préférable de placer le fichier réel sur le serveur et de le rendre accessible pendant la maintenance plutôt que d'avoir un fichier dans la base de données. Un fonctionnement froid est possible ヾ (.> ﹏ <.) ノ ✧ *.
Django a une fonction qui fait ce qui précède automatiquement! C'est le "** champ de fichier **". Définissez simplement le type sur FileField et définissez l'adresse de destination de sauvegarde dans ** upload_to **, et elle sera automatiquement enregistrée!
picture.py
from django.core.validators import FileExtensionValidator
from django.db import models
'''
Modèle d'image
@author shibafu
'''
class Picture(models.Model):
id
name = models.CharField(max_length=200)
#Définir les champs de fichier
image = models.FileField(upload_to='upload_pict/%Y/%m/%d/', #upload_Définissez l'adresse de destination de sauvegarde sur. Si vous faites cela, les médias_télécharger sous la racine_pict/2020/02/Enregistre l'image sur 10
verbose_name='Image téléchargée',#Cela semble être le nom affiché sur l'écran de gestion. Peut-être que vous n'avez pas à le définir
validators=[FileExtensionValidator(['jpg','png','gif', ])],#Validateur d'extension. Erreur lorsque l'extension du fichier téléchargé est différente
)
uploader = models.CharField(max_length=200)
uploadDate = models.DateField()
updateDate = models.DateField()
deleteFlg = models.BooleanField()
def __str__(self):
return '<Picture:id' + str(self.id) + ', ' + \
self.name + '(' + str(self.uploader) + ')>'
Je vais également faire un formulaire modèle
PictUploadForm.py
'''
Modèle de formulaire pour le téléchargement d'images
@author shibafu
'''
class PictUploadForm(forms.ModelForm):
class Meta:
model = Picture
fields = ['name', 'image']
Enfin, décidez du répertoire racine de l'adresse de sauvegarde et le réglage est terminé!
setting.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
Je l'aime bien, mais je le télécharge en utilisant le formulaire modèle. Dans ce format, l'objet de requête
PictService.py
'''
Un service qui effectue un traitement lié à l'image
@author shibafu
'''
class PictService:
#Ajouter une nouvelle image(Pour le formulaire de téléchargement d'image)
def createFromRequest(self, request):
pictObj = Picture()
pictObj.uploader = "L'invité par défaut!"
pictObj.uploadDate = datetime.datetime.today()
pictObj.updateDate = datetime.datetime.today()
pictObj.deleteFlg = False
#Passer à la fois POST et FILE pour les fichiers
#En définissant instanse, vous pouvez décider de la valeur qui peut être automatiquement définie côté serveur au lieu de la requête
pict:PictUploadForm = PictUploadForm(request.POST, request.FILES, instance=pictObj)
pict.errors
if pict.is_valid():
#Vérifiez si la valeur est correcte(Validation)
pict.save()
#Enregistrer la valeur dans DB
Je vais le télécharger!
L'adresse est conservée dans le DB
Le fichier actuel est enregistré dans la zone multimédia!
En créant une fonction pour nommer les fichiers, vous pouvez changer le nom du fichier lors du téléchargement! J'ai pu implémenter le téléchargement de fichiers!
Les références [Django] Comment utiliser la fonction de téléchargement de fichiers [Paramètres de base]
Recommended Posts