Files
testpoint/core/views.py
T
2026-07-29 10:47:40 +00:00

118 lines
3.3 KiB
Python

import logging
from django.conf import settings
from django.contrib import messages
from django.core.mail import EmailMessage
from django.db import connection
from django.http import HttpResponse, JsonResponse
from django.shortcuts import redirect, render
from django.urls import reverse
from .forms import ContactForm
from accounts.leaderboard import build_leaderboard
logger = logging.getLogger(__name__)
def home(request):
rows, current_row, _ = build_leaderboard(
period="week",
current_user=request.user if request.user.is_authenticated else None,
)
preview_user = current_row or {
"rank": 24,
"name": "Akhmed",
"band": 7.5,
"trend": "up",
"initial": "A",
"is_current": True,
"demo": True,
}
return render(
request,
"home.html",
{"leaderboard_preview": rows[:5], "leaderboard_preview_user": preview_user},
)
def faq(request):
return render(request, "faq.html")
def privacy(request):
return render(request, "privacy.html")
def terms(request):
return render(request, "terms.html")
def contact(request):
form = ContactForm(request.POST or None)
if request.method == "POST" and form.is_valid():
body = (
f"Name: {form.cleaned_data['name']}\n"
f"Email: {form.cleaned_data['email']}\n\n"
f"{form.cleaned_data['message']}"
)
email = EmailMessage(
subject=f"Testpoint support: {form.cleaned_data['subject']}",
body=body,
from_email=settings.DEFAULT_FROM_EMAIL,
to=[settings.SUPPORT_EMAIL],
reply_to=[form.cleaned_data["email"]],
)
try:
email.send(fail_silently=False)
except Exception:
logger.exception("Support contact email could not be sent")
messages.error(
request,
"We could not send your message. Please try again shortly.",
)
else:
messages.success(
request,
"Your message has been sent. We'll reply as soon as possible.",
)
return redirect("contact")
return render(
request,
"contact.html",
{"form": form, "support_email": settings.SUPPORT_EMAIL},
)
def health(request):
"""Lightweight process and database readiness check for the host."""
try:
connection.ensure_connection()
except Exception:
return JsonResponse(
{"status": "unhealthy", "database": "unavailable"}, status=503
)
return JsonResponse({"status": "ok", "database": "ok"})
def robots(request):
sitemap_url = request.build_absolute_uri(reverse("sitemap"))
body = f"User-agent: *\nAllow: /\nDisallow: /admin/\nSitemap: {sitemap_url}\n"
return HttpResponse(body, content_type="text/plain")
def sitemap(request):
urls = [
request.build_absolute_uri(reverse("home")),
request.build_absolute_uri(reverse("faq")),
request.build_absolute_uri(reverse("privacy")),
request.build_absolute_uri(reverse("terms")),
request.build_absolute_uri(reverse("contact")),
]
return render(
request,
"sitemap.xml",
{"urls": urls},
content_type="application/xml",
)