38936-vm/core/views.py
2026-03-02 15:46:47 +00:00

73 lines
3.0 KiB
Python

from django.shortcuts import render, get_object_or_404, redirect
from .models import Deal, Lead
from django.contrib import messages
from django.utils import timezone
def home(request):
"""Render the landing page with published deals."""
published_deals = Deal.objects.filter(is_published=True).order_by('-created_at')[:6]
# Simple check for sample data
if not published_deals.exists():
_create_sample_deals()
published_deals = Deal.objects.filter(is_published=True).order_by('-created_at')[:6]
context = {
"deals": published_deals,
"current_time": timezone.now(),
}
return render(request, "core/index.html", context)
def deal_detail(request, pk):
"""Render a single deal and handle lead submissions."""
deal = get_object_or_404(Deal, pk=pk)
if request.method == "POST":
name = request.POST.get("name")
email = request.POST.get("email")
message = request.POST.get("message")
if name and email:
Lead.objects.create(deal=deal, name=name, email=email, message=message)
messages.success(request, "Your request has been sent! We will contact you soon.")
return redirect('deal_detail', pk=pk)
else:
messages.error(request, "Please fill in all required fields.")
return render(request, "core/deal_detail.html", {"deal": deal})
def _create_sample_deals():
"""Seed the database with sample deals if empty."""
deals = [
{
"title": "Unreal Points Deal: London to NYC",
"deal_type": "points",
"destination": "New York, USA",
"points_required": 15000,
"description": "Virgin Atlantic points deal. Unbeatable value for Business Class upgrade.",
"image_url": "https://images.pexels.com/photos/466685/pexels-photo-466685.jpeg?auto=compress&cs=tinysrgb&w=800",
"is_published": True
},
{
"title": "Flight Drop: Bali Flash Sale",
"deal_type": "flight",
"destination": "Bali, Indonesia",
"current_price": 450.00,
"original_price": 890.00,
"description": "Round trip from LAX. Limited seats available for March/April travel.",
"image_url": "https://images.pexels.com/photos/2166553/pexels-photo-2166553.jpeg?auto=compress&cs=tinysrgb&w=800",
"is_published": True
},
{
"title": "Business Class: Paris for Less",
"deal_type": "flight",
"destination": "Paris, France",
"current_price": 1200.00,
"original_price": 2500.00,
"description": "Lufthansa luxury at half the price. Multi-city options available.",
"image_url": "https://images.pexels.com/photos/338515/pexels-photo-338515.jpeg?auto=compress&cs=tinysrgb&w=800",
"is_published": True
},
]
for d in deals:
Deal.objects.get_or_create(title=d['title'], defaults=d)