-
Notifications
You must be signed in to change notification settings - Fork 79
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add local image upload into flat pages content (ref #3552) #4024
Conversation
Passing run #8590 ↗︎Details:
Review all test suite changes for PR #4024 ↗︎ |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #4024 +/- ##
=======================================
Coverage 98.41% 98.41%
=======================================
Files 282 284 +2
Lines 20757 20777 +20
=======================================
+ Hits 20427 20447 +20
Misses 330 330 ☔ View full report in Codecov by Sentry. |
20ab020
to
f4bb7fc
Compare
dadeeeb
to
bef7eec
Compare
f4bb7fc
to
05b5d1d
Compare
bef7eec
to
c2aa804
Compare
geotrek/flatpages/views.py
Outdated
os.makedirs(os.path.dirname(location), exist_ok=True) | ||
with open(location, "wb+") as destination: | ||
destination.write(file.read()) | ||
return JsonResponse({"location": request.build_absolute_uri(path)}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pour la partie technique,
çà serait mieux d'utiliser une CBV.
Pour la partie fonctionnelle, çà serait mieux d'utiliser les storage django plutot que de tout faire à la main.
De plus, le contenu de /media/ doit être lié à une entrée BDD, sinon la commande clean_attachments suppriemra le fichier. Il faut donc utiliser un Attachment sur les flatpage
Du genre: j'upload un fichier, çà créé automatiquement un attachment de type photo exploitable.
La difficulté, c'est qu'il est impossible d'enregistrer un attacmet avant d'avoir enregistré une premiere fois la page statique
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fait pour la remarque sur utiliser l'interface du storage django plutôt que les fichiers directement.
Comme indiqué dans la PR côté Mapentity (makinacorpus/django-mapentity#277), je trouve dommage de bloquer cette évolution globale du WYSIWYG côté Mapentity pour un mécanisme de suppression des images orphelines très secondaire. A noter aussi : il me semble dommage de mettre A noter aussi : On pourrait avoir besoin de ce WYSIWYG dans d'autres objets de l'AdminSite (recommandation des étiquettes, description des lieux de renseignement...) donc ce développement ne doit pas forcément être spécifiques aux pages statiques. |
Côté django, les conventions de dev exigent que tout ce qui est dans /media/ soit reférencé en BDD. C'est pas vraiment difficile et peut être totalement transparent pour l'utilisateur, quitte à utiliser un autre modèle qu'attachment. De plus, utiliser un modele ety un ImageField permetrait d'exploiter la possibilité de création des thumbnails, là on ouvre la porte aux utilisateurs uploadant des fichiers gigantesques, ou utiliser le mecanisme de nettoyage de fichier vérolé mis en place avec les signalements Voyant ce que donne des instances apres 10ans d'utilisations, je suis pour que dans tous les cas on puisse nettoyer les fichiers inutilisés. Ca prend de la place dans les backups etc. Outre ce point à discuter, l'utilisation des storage django est primordiale, ne serait-ce que pour pouvoir utiliser d'autres backends, ou pour s'assurer que le nom de fichier n'est pas déjà utilisé https://docs.djangoproject.com/en/5.0/topics/files/#storage-objects |
Oui c'est intéressant si c'est géré comme des attachments comme les autres médias. |
aabfa7a
to
15e1368
Compare
86c7a0d
to
3bedabc
Compare
Je suis d'accord avec vos remarques concernant l'utilisation des Attachments pour les images uploadées pour bénéficier des checks de sécurité, du redimensionnement automatique, du suivi et du nettoyage des fichiers uploadés. Comme il s'agit d'un développement non-trivial (dû au fait que l'Attachement ne peut pas être créé directement dans le endpoint appelé par TinyMCE La mise à jour pour les utilisateurs ayant déjà commencé à uploader des images sera invisible, les fichiers déjà uploadés seront toujours disponibles. Il manquera juste les Attachments correspondants. |
15e1368
to
fbfd825
Compare
3bedabc
to
a4b03d4
Compare
Cette PR ajoute la possibilité d'uploader des images locales pour les insérer dans le contenu des pages statiques.
Description
La fonctionnalité se base sur l'option
image_upload_url
du pluginimage
de TinyMCE et l'ajout de la View correspondante côté Django.Reprend l'implémentation de @babastienne pour
django-mapentity
. Dans l'attente d'une solution pour gérer le cycle de vie des images (suivi du lien entre image uploadée et page statique, suppression quand plus utilisée) la feature est ajoutée spécifiquement pour les pages statiques où le volume d'image uploadée sera peu important.Liens :
PR django-mapentity
Related Issue
Attach files on flatpages #3552
Checklist
I have made corresponding changes to the documentation