[PYTHON] L'histoire de l'affichage des fichiers multimédias dans Django

Comment afficher les fichiers multimédias dans Django

Tout d'abord, cela ressemble à ceci d'accepter l'enregistrement de fichiers sur le service Web.

Enregistrement de fichier ↓ Affichage des fichiers

En particulier, Django a une classe appelée ** File Field **, qui est dédiée à la sauvegarde des fichiers. Parce qu'il existe des classes appelées ** formulaire de téléchargement ** et ** modèle ** Je pense que c'est assez facile à faire.

Comme il est difficile d'écrire du côté du téléchargement, il peut être acceptable d'écrire un document officiel. (Télécharger le fichier) En gros, ça ressemble à ça

Classes prises en charge par Django une fonction
Champ de fichier Recevoir les informations de fichier de la demande, enregistrer les données binaires dans le répertoire et enregistrer l'adresse du fichier dans la base de données
Télécharger le formulaire Définir une valeur dans le champ du modèle (entité en Java)
modèle Il a un champ de modèle (entité en Java). Le modèle Django est livré en standard avec la fonctionnalité ORM, et les bases de données et les champs sont toujours migrés et synchronisés. De plus, enregistrez dans le modèle()La méthode est installée. Unité de persistance automatique(´ ・ ω ・ `)

Tout d'abord, pour définir le fichier multimédia Définit le répertoire racine des fichiers multimédias.

Paramètres du serveur. Paramètres Django et Nginx

Réglez setting.py comme d'habitude.

setting.py


BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')   #← Ajouter ceci
MEDIA_URL = '/media/'

BASE_DIR est deux au-dessus de setting.py, c'est-à-dire le répertoire racine de l'application avec ** manage.py **. Cela signifie que. Par conséquent, le répertoire racine du fichier multimédia est défini sur le répertoire multimédia ** dans le même répertoire que ** manage.py. Et l'URL pour accéder au fichier multimédia est définie sur ** / media / **.

En fait, dans cet état, même si le côté Django est OK, le côté Nginx qui reçoit l'accès Parce que j'obtiens une erreur telle que "Le fichier est trop gros!"

Je vous enverrai un gros fichier image. Je dois écrire le décor. Ouvrons le fichier de paramètres

% sudo vim /etc/nginx/conf.d/site.conf $Emplacement des paramètres Nginx pour Ubuntu. Pour la secte CentOS, essayez un autre fichier

site.conf


server {
   listen  80;
   listen [::]:80;
   server_name sample;
   client_max_body_size 20M; #ajouter à. La taille maximale de la transmission des demandes est de 20 Mo

   location /static {
       alias /home/Nom d'utilisateur que vous avez défini/Racine de l'application/static;
   }

   location /media {  #ajouter à. Définir le fichier multimédia et l'URL
       alias /home/Nom d'utilisateur que vous avez défini/Racine de l'application/media;
   }

   location / {
       proxy_pass http://127.0.0.1:8000;
    }
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $http_host;
       proxy_redirect off;
       proxy_set_header X-Forwarded-Proto $scheme;
}

Assurons-nous que cet emplacement et la racine du média de Django pointent vers le même emplacement comme celui-ci (^-^)

Ceci termine les paramètres du serveur!

Comment utiliser la fonction de téléchargement

C'est ennuyeux, alors je vais le décomposer et expliquer (´ ・ ω ・ `) Le champ de fichier est utilisé en l'incorporant dans le modèle comme ceci.

fileModel.py


from django.core.validators import FileExtensionValidator
from django.db import models

'''
Modèle d'image
@author Nozawa
'''
class Picture(models.Model):
    id = models.BigAutoField(primary_key=True,unique=True)
    name = models.CharField(max_length=200)
    image = models.FileField(upload_to='upload_pict/%Y/%m/%d/',
                             verbose_name='Image téléchargée',
                             validators=[FileExtensionValidator(['jpg','png','gif', ])],
                             ) #upload_Sélectionnez le répertoire de destination de l'enregistrement avec pour sélectionner l'extension avec les validateurs. Verbeux_Définir comment afficher sur l'écran de gestion avec le nom
    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) + ')>'

Le formulaire de téléchargement est utilisé comme ceci.

PictUploadForm.py



'''
Modèle de formulaire pour le téléchargement d'images
'''
class PictUploadForm(forms.ModelForm):
    class Meta:
        model = Picture
        fields = ['name', 'image']

pictureService.py


    def createPicutre(self, request):
        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

En fait, le formulaire de téléchargement est une fonction qui omet la manière originale d'écrire un téléchargement de fichier. Le formulaire de téléchargement se fait en entrant l'instance de modèle et la demande. ** Une classe pratique qui définit automatiquement les valeurs du modèle **!

À l'origine, comme le dit le document officiel, il est écrit comme ceci

sample.py


            instance = ModelWithFileField(file_field=request.FILES['file']) #Le nom du champ est spécifié dans le constructeur et défini.
            instance.save()

Enfin, l'écran d'affichage du côté du téléchargement sera affiché.

UploadView.py


class UploadView(TemplateView):
    #Processus d'initialisation
    def __init__(self):
        self.params = {
            'form': PictUploadForm.PictUploadForm(),
        }
    #Afficher le formulaire d'image
    def get(self, request):
        #Objet image de remplacement
        return render(request, 'memFrame/Écran de téléchargement.html', self.params)

Écran de téléchargement.html


<form action="{% url 'pictUpload' %}" method="post" enctype="multipart/form-data"> <!--Configurer plusieurs parties et préparer le téléchargement de fichiers-->
    {% csrf_token %}
    {{ form.name }}
    {{ form.image }}
    <tr>
        <td>
            <input type="submit" value="Importer des images!"/>
        </td>
    </tr>
</form>

Comment utiliser la fonction d'affichage

ViewingView.py


class ViewingView(TemplateView):
    #Classe de service d'image
    pictService:PictService = PictService.PictService()
    #Afficher le formulaire d'image
    def get(self, request):
        #Objet image de remplacement
        pictList:list = self.pictService.findAll()
        self.params = {
            'picts':pictList,
        }

        print(pictList)

        return render(request, 'myapplication/Écran d'affichage.html', self.params)

Écran d'affichage.html


{% for pict in picts %}
    <h2>{{ pict.name }}</h2>
    <img src='{{pict.image.url}}' width=200> #Spécifiez l'URL du champ de fichier dans la balise d'image
{% endfor %}

résultat

J'ai pu afficher l'image téléchargée ヾ (.> ﹏ <.) ノ ✧ *.

image.png

image.png

Recommended Posts

L'histoire de l'affichage des fichiers multimédias dans Django
L'histoire de la participation à AtCoder
L'histoire du "trou" dans le fichier
L'histoire de sys.path.append ()
L'histoire de la recherche du n optimal dans N poing
L'histoire de la lecture des données HSPICE en Python
L'histoire de la création de l'environnement Linux le plus rapide au monde
L'histoire de FileNotFound en Python open () mode = 'w'
L'histoire de la construction de Zabbix 4.4
J'ai participé à l'activité de traduction du document officiel Django
Maintenance de l'environnement de développement Django + MongoDB (en cours d'écriture)
L'histoire du champ de modèle Django disparaissant de la classe
Résumé des points d'achoppement à Django pour la première fois
L'histoire de la rétrogradation de la version de tensorflow dans la démo de Mask R-CNN.
L'histoire de Python et l'histoire de NaN
Gestion des fichiers JSON en Python
Changer la langue affichée dans Django 1.9
L'histoire du remontage du serveur d'application
L'histoire de l'exportation d'un programme
Récupérer la chaîne de requête (chaîne de requête) avec Django
django ne peut pas être installé dans l'environnement de développement de pipenv + pyenv
L'histoire de la sortie du maître de planétarium au format pdf avec Pycairo
Effectuer un test d'application de fichier de migration avec Django + PostgreSQL (Evil Edition)
L'histoire de l'échec de la mise à jour de "calendar.day_abbr" sur l'écran d'administration de django
L'histoire du retour au front pour la première fois en 5 ans et de la refactorisation de Python Django
Considérez la description de Dockerfile (Django + MySQL②)
Obtenez l'adresse IP du client avec Django
L'histoire d'un capteur de stationnement en 10 minutes avec le kit de démarrage GrovePi +
L'histoire d'essayer de reconnecter le client
J'ai essayé le serveur asynchrone de Django 3.0
[Comprendre en 3 minutes] Le début de Linux
Vérifiez le comportement du destroyer en Python
Comprendre la commodité de Django Rest Framework
Django ~ Affichons-le sur le navigateur ~
Comment vérifier la version de Django
Arborescence de sortie des fichiers en Python
L'histoire de la mise en place de MeCab dans Ubuntu 16.04
Remarques sur la création de fichiers statiques avec Django
Lire tous les fichiers csv dans le dossier
L'histoire de la fabrication d'un moule immuable
Le résultat de l'installation de python sur Anaconda
L'histoire de la manipulation des variables globales Python
L'histoire d'essayer deep3d et de perdre
Décodage du modèle LSTM de Keras.
Bonjour tout le monde pas localhost à Django
À la recherche du FizzBuzz le plus rapide en Python
L'histoire du traitement A du blackjack (python)
L'histoire du changement de pep8 en pycodestyle
L'histoire de l'utilisation de mysqlclient car PyMySQL ne peut pas être utilisé avec Django 2.2
Essayez d'accéder à l'API Spotify dans Django.
Prenons la description de docker-compose.yml (Django + MySQL ③)
Comment identifier de manière unique la source d'accès dans la vue de classe générique Django
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
Vérifiez le nombre de fois où la requête (sql) a été lancée dans django avec un test
L'histoire de Django créant une bibliothèque qui pourrait être un peu plus utile
Je souhaite voir une liste de fichiers WebDAV dans le module Requêtes