Files
B42/at_django_boilerplate/core/views.py
2026-01-07 13:06:58 +05:30

222 lines
7.3 KiB
Python
Executable File

from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.views.generic import TemplateView,View
from .models import Subscriber
from django.views.generic import TemplateView
from django.utils import timezone
from django.contrib import messages
from at_django_boilerplate.backend_admin.models import SEOConfiguration
# at_django_boilerplate/core/views.py
from django.shortcuts import redirect
from django.views.generic import TemplateView
import random
from django.shortcuts import redirect
from django.views.generic import TemplateView
from django.utils import timezone
from .models import ABTestRecord
from django.urls import reverse_lazy
from at_django_boilerplate.accounts.models import CustomUser
from django.contrib.auth import login
from at_django_boilerplate.utils.encryption_utils import EncryptionUtils
enc = EncryptionUtils()
class IndexView(TemplateView):
template_name = 'index.html' # default (we'll override dynamically)
def dispatch(self, request, *args, **kwargs):
# Redirect logged-in users
if request.user.is_authenticated:
return redirect('dashboard')
# Assign variant (if not already assigned)
variant = request.session.get('ab_variant')
if not variant:
variant = random.choice(['A', 'B'])
request.session['ab_variant'] = variant
# Ensure session exists
if not request.session.session_key:
request.session.create()
# Optional: record in DB for analytics
ABTestRecord.objects.get_or_create(
session_key=request.session.session_key,
defaults={'variant': variant},
)
# Store chosen template name
self.template_name = 'index.html'
return super().dispatch(request, *args, **kwargs)
class DashboardView(TemplateView):
template_name = 'dashboard.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['meta_title'] = "Dashboard - Register Your Startup"
context['meta_description'] = "Manage your startup journey with Register Your Startup."
return context
def get_seo():
return SEOConfiguration.objects.first()
class TermsView(TemplateView):
template_name = 'legal/toc.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
seo = SEOConfiguration.objects.first()
context["meta_title"] = seo.term_and_con_meta_title if seo else "Terms & Conditions - Zestato"
context["meta_description"] = seo.term_and_con_meta_description if seo else "View our latest terms and conditions."
return context
class PrivacyPolicyView(TemplateView):
template_name = 'legal/privacy.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
seo = SEOConfiguration.objects.first()
context["meta_title"] = seo.privacy_pol_meta_title if seo else "Privacy Policy - Zestato"
context["meta_description"] = seo.privacy_pol_meta_description if seo else "Read Zestato's privacy practices and data usage policy."
return context
class DataProtectionView(TemplateView):
template_name = 'legal/data_protection.html'
class ImprintView(TemplateView):
template_name = 'legal/imprint.html'
class PressView(TemplateView):
template_name = 'company/press.html'
class SuccessStories(TemplateView):
template_name = 'company/success_stories.html'
class Training(TemplateView):
template_name = 'company/training.html'
class HelpAndSupport(TemplateView):
template_name = 'company/help_and_support.html'
class AboutUsView(TemplateView):
template_name = 'company/about_us.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
seo = SEOConfiguration.objects.first()
context["meta_title"] = seo.about_meta_title if seo else "About Us - Zestato"
context["meta_description"] = seo.about_meta_description if seo else "Learn about Zestato's mission, values, and team."
return context
class BlogsView(TemplateView):
template_name = 'company/blog.html'
class OurCoreTeam(TemplateView):
template_name = 'company/ourcoreteam.html'
class CookiePolicy(TemplateView):
template_name = 'legal/cookiepolicy.html'
class CareersView(TemplateView):
template_name = 'company/careers.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
seo = SEOConfiguration.objects.first()
context["meta_title"] = seo.career_meta_title if seo else "Careers - Zestato"
context["meta_description"] = seo.career_meta_description if seo else "Explore exciting career opportunities at Zestato."
return context
class FaqView(TemplateView):
template_name = 'company/faq.html'
def robots_txt(request):
seo = SEOConfiguration.objects.first()
lines = [
"User-Agent: *",
"Disallow: /admin/",
"Allow: /",
]
# Optionally add canonical URLs as Sitemap entries (if available)
if seo:
if seo.term_and_con_canonical_url:
lines.append(f"Sitemap: {seo.term_and_con_canonical_url}")
if seo.privacy_pol_canonical_url:
lines.append(f"Sitemap: {seo.privacy_pol_canonical_url}")
return HttpResponse("\n".join(lines), content_type="text/plain")
def custom_500(request):
# You can add extra context or logging here
return render(request, 'defaults/500.html', status=500)
def custom_404(request, exception=None):
# You can add any additional context here if necessary
return render(request, 'defaults/404.html', status=404)
def custom_400(request, exception=None):
# You can customize the context further if needed
return render(request, 'defaults/400.html', status=400)
def custom_403(request, exception=None):
# You can customize the context further if needed
return render(request, 'defaults/403.html', status=403)
def subscribe_view(request):
if request.method == "POST":
email = request.POST.get("email")
if email:
# created = False
# subscriber = None
subscriber, created = Subscriber.objects.get_or_create(email=email)
if created:
messages.success(request, "Thank you for subscribing!")
else:
if subscriber.is_active:
messages.warning(request, "You are already subscribed.")
else:
subscriber.is_active = True
subscriber.subscribed_at = timezone.now() # update date
subscriber.save()
messages.success(request, "Welcome back! You have been re-subscribed.")
return redirect("index")
return render(request, "company/subscriber.html")
def unsubscribe_view(request, id):
try:
subscriber = Subscriber.objects.get(id=id)
if subscriber.is_active:
subscriber.is_active = False
subscriber.save()
messages.success(request, "You have been unsubscribed successfully.")
else:
messages.info(request, "You are already unsubscribed.")
except Subscriber.DoesNotExist:
messages.error(request, "Invalid unsubscribe link.")
return redirect("index")