picture-display/src/pictures/views.py

54 lines
1.6 KiB
Python

from smtplib import SMTPException
from anymail.exceptions import AnymailRequestsAPIError
from django.conf import settings
from django.core.mail import EmailMessage
from django.http import JsonResponse
from django.shortcuts import get_object_or_404
from django.utils.decorators import method_decorator
from django.views import generic
from django.views.decorators.csrf import ensure_csrf_cookie
from pictures.models import Message
class MessageListView(generic.ListView):
model = Message
template_name = "pictures/messages-list.html"
context_object_name = "messages"
@method_decorator(ensure_csrf_cookie, name="dispatch")
class MessageDetailView(generic.DetailView):
model = Message
template_name = "pictures/messages-detail.html"
context_object_name = "message"
def send_email(request, pk):
message = get_object_or_404(Message, pk=pk)
all_media = message.media_files.all()
media_count = len(all_media)
if media_count > 1:
subject = "Vos photos"
else:
subject = "Votre photo"
message_text = (
message.content
+ "\n\n-- \nEnvoyé depuis votre cadre photo, par Claire & Gabriel"
)
try:
email = EmailMessage(
subject,
message_text,
from_email=None,
to=[settings.EMAIL_RECIPIENT],
)
for media in all_media:
email.attach_file(media.file.path)
email.send(fail_silently=False)
except (SMTPException, AnymailRequestsAPIError) as e:
return JsonResponse({"status": "error", "message": str(e)}, status=500)
return JsonResponse({"status": "ok"}, status=200)