IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Problème upload fichier


Sujet :

Django Python

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2020
    Messages : 2
    Par défaut Problème upload fichier
    Bonjour,

    Voila 2 jours que je m'arrache les cheveux sur un problème d'upload dont je n'arrive pas à comprendre mon erreur.

    Pour expliquer mon problème j'ai réalisé un tout petit formulaire (avec une erreur systématique sur la zone "Zone"):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Upload_File(forms.Form):
        def __init__(self, *args, **kwargs):
            super(Upload_File, self).__init__(*args, **kwargs)
     
            self.fields['Zone'] = forms.CharField(max_length=100, required = True, label='Test')
            self.fields['Upload_File'] = forms.FileField(label='Sélectionner votre fichier', required=True)
     
        def clean_Zone(self):
            cleaned_data = super(Upload_File, self).clean()
            Clean_Zone = self.cleaned_data.get('Zone')
            raise forms.ValidationError("Error")
            return Clean_Zone
    Ma vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from django import forms
    from .Formulaires_Dynamiques.forms_1 import Formulaire_Django, Upload_File
     
    def Archivage_Dynamique(request, Pack, Type_Doc) :
     
        if request.method == 'POST':
            form = Upload_File(request.POST, request.FILES)
            if form.is_valid():
               return HttpResponse('Bravo')
     
        else:
            form = Upload_File()
     
        return render(request, "xemii/Archivage_Dynamique2.html", {'form': form})
    Mon HTML :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    {% extends "xemii/Base.html" %}
    {% load static %}
    {% block content %}
    <section class="row justify-content-center" style="padding-top:75px">
        <div class="container">
            <form method="post"  enctype="multipart/form-data" class="form-control formulaire" id="form_id">
                {% csrf_token %}
                {{form.as_p}}
                <div style="padding:50px">
                <input type="submit" value="Test" class="btn btn-outline-primary btn-rounded waves-effect" style="display:block; margin:auto; width:200px">
                </div>
     
                Request.FILES {{request.FILES}}
     
            </form>
        </div>
    </section>
    {% endblock %}
    Lorsque j'affiche ma page tout se passe bien, j'ai bien une zone de saisie obligatoire et un input obligatoire.

    Mon problème est que lorsque je rencontre une erreur (généré par ma zone "ZONE" via la fonction clean_ZONE), j'ai bien mon fichier choisi dans le request.FILES (affiché en bas de ma page), mais ma zone Upload_File se vide.

    voici la démo :

    affichage de la page

    Nom : Capture d’écran du 2020-10-30 16-27-14.png
Affichages : 255
Taille : 13,7 Ko

    saisie de la zone et choix du fichier :

    Nom : Capture d’écran du 2020-10-30 16-27-33.png
Affichages : 250
Taille : 14,4 Ko

    validation de l'écran pour générer l'erreur :

    Nom : Capture d’écran du 2020-10-30 16-27-47.png
Affichages : 255
Taille : 20,9 Ko

    Je perds mon fichier que j'avais sélectionné alors que mon request.FILES est bien affiché.

    J'ai bien l'attribut "multipart/form-data" dans ma balise form en html, je passe bien le request.FILES lors de la génération de mon formulaire au moment du post.

    Je n'arrive pas à voir ce qui ne va pas.

    Pouvez-vous m'aider ?

    Merci.

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Je ne sais pas si c'est la cause de ton problème mais cette fonction me semble erronée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        def clean_Zone(self):
            cleaned_data = super(Upload_File, self).clean() # Pourquoi pas simplement                   
                                                            # self.clean() ?
            Clean_Zone = self.cleaned_data.get('Zone')      # Il y a un self en trop ici.
            raise forms.ValidationError("Error")            # raise lève une erreur donc,
            return Clean_Zone                               # le return est ignoré.

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2020
    Messages : 2
    Par défaut
    Salut VinsS,

    Merci pour ton retour. J'ai suivi tes conseils et j'ai revu mon code du formulaire pour donner cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Upload_File(forms.Form):
        def __init__(self, *args, **kwargs):
            super(Upload_File, self).__init__(*args, **kwargs)
     
            self.fields['Zone'] = forms.CharField(max_length=100, required = True, label='Test')
            self.fields['Upload_File'] = forms.FileField(label='Sélectionner votre fichier', required=True)
     
        def clean_Zone(self):
            cleaned_data = self.clean()
            Clean_Zone = cleaned_data.get('Zone')
            raise forms.ValidationError("Error")
    Malheureusement, j'ai toujours le même problème. Mais effectivement c'est plus cohérent. Tu as du remarquer que je débute sur Django, donc merci pour tes conseils.
    Pourtant je ne vois toujours pas ce qui cloche .
    Au pire est ce que quelqu'un aurait un exemple à me montrer que je puisse le comparer avec ce petit bout de code ?

    Est-ce qu'il faut que je fasse une manipulation particulière dans une fonction clean_Upload_File afin de conserver mon lien avec l'input ?

Discussions similaires

  1. Problème upload fichier avec Internet Explorer
    Par dexter59 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 04/10/2010, 10h09
  2. Problème upload fichier texte vide
    Par exile69 dans le forum C#
    Réponses: 4
    Dernier message: 08/09/2010, 11h19
  3. Problème upload fichier php
    Par mbsss dans le forum Langage
    Réponses: 1
    Dernier message: 30/04/2009, 13h47
  4. [Upload] Problème upload fichier ?
    Par zuzuu dans le forum Langage
    Réponses: 1
    Dernier message: 09/12/2008, 14h02
  5. [Upload] Problème Upload Fichiers via html
    Par Typhon dans le forum Langage
    Réponses: 3
    Dernier message: 11/02/2007, 11h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo