Refactor email system and add contact form backend
Refactored email sending to use a single HTML template with a base layout, removed plain text email templates, and updated all related backend logic. Introduced a new ContactMe model, serializer, Celery task, and API endpoints for handling contact form submissions, including email notifications. Renamed ShopConfiguration to SiteConfiguration throughout the backend for consistency. Updated frontend to remove unused components, add a new Services section, and adjust navigation and contact form integration.
This commit is contained in:
@@ -1,3 +1,46 @@
|
||||
from django.shortcuts import render
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import status, viewsets
|
||||
from rest_framework.permissions import AllowAny, IsAdminUser
|
||||
from rest_framework.authentication import SessionAuthentication
|
||||
|
||||
from .models import ContactMe
|
||||
from .serializer import ContactMeSerializer
|
||||
from .tasks import send_contact_me_email_task
|
||||
|
||||
|
||||
class ContactMePublicView(APIView):
|
||||
permission_classes = [AllowAny]
|
||||
# Avoid CSRF for public endpoint by disabling SessionAuthentication
|
||||
authentication_classes = []
|
||||
|
||||
def post(self, request):
|
||||
email = request.data.get("email")
|
||||
message = request.data.get("message")
|
||||
honeypot = request.data.get("hp") # hidden honeypot field
|
||||
|
||||
# If honeypot is filled, pretend success without processing
|
||||
if honeypot:
|
||||
return Response({"status": "ok"}, status=status.HTTP_200_OK)
|
||||
|
||||
if not email or not message:
|
||||
return Response({"detail": "Missing email or message."}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
# Save to DB
|
||||
cm = ContactMe.objects.create(client_email=email, content=message)
|
||||
|
||||
# Send email via Celery task
|
||||
try:
|
||||
send_contact_me_email_task.delay(email, message)
|
||||
except Exception:
|
||||
# Fallback to direct call if Celery is not running in DEV
|
||||
send_contact_me_email_task(email, message)
|
||||
|
||||
return Response({"id": cm.id, "status": "queued"}, status=status.HTTP_201_CREATED)
|
||||
|
||||
|
||||
class ContactMeAdminViewSet(viewsets.ModelViewSet):
|
||||
queryset = ContactMe.objects.all().order_by("-sent_at")
|
||||
serializer_class = ContactMeSerializer
|
||||
permission_classes = [IsAdminUser]
|
||||
|
||||
# Create your views here.
|
||||
|
||||
Reference in New Issue
Block a user