Loading fotoblog/authentication/models.py +1 −2 Original line number Diff line number Diff line from django.db import models from django.contrib.auth.models import AbstractUser class User(AbstractUser): CREATOR = 'CREATOR' Loading fotoblog/blog/forms.py +5 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,11 @@ class MediaForm(forms.ModelForm): fields = ['image', 'caption'] class MediaDeleteForm(forms.Form): media_delete = forms.BooleanField(widget=forms.HiddenInput, initial=True) class BlogForm(forms.ModelForm): post_edit = forms.BooleanField(widget=forms.HiddenInput, initial=True) Loading fotoblog/blog/models.py +42 −0 Original line number Diff line number Diff line import os import uuid from django.db import models from django.conf import settings from django.core.validators import MinValueValidator from PIL import Image from django.dispatch import receiver class Photo(models.Model): image = models.ImageField() Loading @@ -16,6 +20,7 @@ class Photo(models.Model): image = Image.open(self.image) image.thumbnail(self.IMAGE_MAX_SIZE) image.save(self.image.path) image.close() def save(self, *args, **kwargs): super().save(*args, **kwargs) Loading @@ -42,3 +47,40 @@ class Blog(models.Model): def save(self, *args, **kwargs): self.word_count = self._word_count() super().save(*args, **kwargs) # These two auto-delete files from filesystem when they are unneeded: @receiver(models.signals.post_delete, sender=Photo) def auto_delete_file_on_delete(sender, instance, **kwargs): """ Deletes file from filesystem when corresponding `MediaFile` object is deleted. """ if instance.image: if os.path.isfile(instance.image.path): os.remove(instance.image.path) @receiver(models.signals.pre_save, sender=Photo) def auto_delete_file_on_change(sender, instance, **kwargs): """ Deletes old file from filesystem when corresponding `MediaFile` object is updated with new file. """ if not instance.pk: return False try: old_file = Photo.objects.get(pk=instance.pk).image except Photo.DoesNotExist: return False new_file = instance.image if not old_file == new_file: if old_file.name and os.path.isfile(old_file.path): # TODO: find why sometimes the file is used, not closed and trigger PermissionError # seems due to Photo save() overide since the problem does not occur when it's deleted try: os.remove(old_file.path) except PermissionError: return False fotoblog/blog/templates/blog/media_delete.html 0 → 100644 +19 −0 Original line number Diff line number Diff line {% extends 'base.html' %} {% block title %}Fotoblog - Media Upload{% endblock %} {% block content %} <h1>Supprimer un média</h1> <p> {% include "messages_notif.html" %} êtes vous sûr de vouloir supprimer le media {{ media.caption }} <form method="post" enctype="multipart/form-data"> {% csrf_token %} <button type="submit" >supprimer</button> </form> </p> {% endblock %} No newline at end of file fotoblog/blog/templates/blog/media_list.html +3 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,9 @@ <div class="post"> <img src="{{ media.image.url }}"> <p>{{ media.caption }}</p> {% if user.is_authenticated %} <p><a href="{% url 'media-delete' media.id %}" > Supprimer </a></p> {% endif %} </div> {% endfor %} {% endif %} Loading Loading
fotoblog/authentication/models.py +1 −2 Original line number Diff line number Diff line from django.db import models from django.contrib.auth.models import AbstractUser class User(AbstractUser): CREATOR = 'CREATOR' Loading
fotoblog/blog/forms.py +5 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,11 @@ class MediaForm(forms.ModelForm): fields = ['image', 'caption'] class MediaDeleteForm(forms.Form): media_delete = forms.BooleanField(widget=forms.HiddenInput, initial=True) class BlogForm(forms.ModelForm): post_edit = forms.BooleanField(widget=forms.HiddenInput, initial=True) Loading
fotoblog/blog/models.py +42 −0 Original line number Diff line number Diff line import os import uuid from django.db import models from django.conf import settings from django.core.validators import MinValueValidator from PIL import Image from django.dispatch import receiver class Photo(models.Model): image = models.ImageField() Loading @@ -16,6 +20,7 @@ class Photo(models.Model): image = Image.open(self.image) image.thumbnail(self.IMAGE_MAX_SIZE) image.save(self.image.path) image.close() def save(self, *args, **kwargs): super().save(*args, **kwargs) Loading @@ -42,3 +47,40 @@ class Blog(models.Model): def save(self, *args, **kwargs): self.word_count = self._word_count() super().save(*args, **kwargs) # These two auto-delete files from filesystem when they are unneeded: @receiver(models.signals.post_delete, sender=Photo) def auto_delete_file_on_delete(sender, instance, **kwargs): """ Deletes file from filesystem when corresponding `MediaFile` object is deleted. """ if instance.image: if os.path.isfile(instance.image.path): os.remove(instance.image.path) @receiver(models.signals.pre_save, sender=Photo) def auto_delete_file_on_change(sender, instance, **kwargs): """ Deletes old file from filesystem when corresponding `MediaFile` object is updated with new file. """ if not instance.pk: return False try: old_file = Photo.objects.get(pk=instance.pk).image except Photo.DoesNotExist: return False new_file = instance.image if not old_file == new_file: if old_file.name and os.path.isfile(old_file.path): # TODO: find why sometimes the file is used, not closed and trigger PermissionError # seems due to Photo save() overide since the problem does not occur when it's deleted try: os.remove(old_file.path) except PermissionError: return False
fotoblog/blog/templates/blog/media_delete.html 0 → 100644 +19 −0 Original line number Diff line number Diff line {% extends 'base.html' %} {% block title %}Fotoblog - Media Upload{% endblock %} {% block content %} <h1>Supprimer un média</h1> <p> {% include "messages_notif.html" %} êtes vous sûr de vouloir supprimer le media {{ media.caption }} <form method="post" enctype="multipart/form-data"> {% csrf_token %} <button type="submit" >supprimer</button> </form> </p> {% endblock %} No newline at end of file
fotoblog/blog/templates/blog/media_list.html +3 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,9 @@ <div class="post"> <img src="{{ media.image.url }}"> <p>{{ media.caption }}</p> {% if user.is_authenticated %} <p><a href="{% url 'media-delete' media.id %}" > Supprimer </a></p> {% endif %} </div> {% endfor %} {% endif %} Loading